这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 合作大赛 » 瑞萨单片机中断处理

共5条 1/1 1 跳转至

瑞萨单片机中断处理

菜鸟
2011-04-18 23:07:37     打赏
#include "sfr_r825.h" #define _Disableint asm("Fclr I") //I标志位为0,则禁止所有的可屏蔽中断 #define _Enableint asm("Fset I") //I标志位置1,表示打开总中断控制 unsigned int num; int a; void TimerRAHandler(void); void StartTimer(void); void main(void) { _Disableint; pd2_5=1 ;//IO输出 控制灯 StartTimer(); _Enableint; if(num==100){ p2_5 ^= 0; num=0; } while(1); } void StartTimer(void) { tstart_tracr = 0; /* 停止计时 */ while(tcstf_tracr != 0);/*是否停止计数*/ traic = 0x00; /* Disable Timer RA Interrupt */ tstop_tracr = 1; /*强制停止计数*/ /*****************************************************/ /* 定时时间 : 50ns* 100 * 100 = 0.5ms */ trapre = 100-1; /* Set (100 - 1) in TRAPRE register */ tra = 100-1; /* Set (100 - 1) in TRA register */ /*****************************************************/ /*我用的是20m的晶振,如何计算时间呢?*/ tedgsel_traioc = 0; /*输出极性切换 */ topcr_traioc = 0; /* 输出控制 */ toena_traioc = 0; /* 输出允许位*/ /* 计数器模式中以上三位必须清零 */ tipf0_traioc = 0; /* 输入滤波器选择 */ tipf1_traioc = 0; /* 输入滤波器选择 */ /* 计数器模式中以上两位必须清零 */ tmod0_tramr = 0; /* Set to "000" 定时器模式*/ tmod1_tramr = 0; tmod2_tramr = 0; tck0_tramr = 0; /* Select "fOCO" 计数源 */ tck1_tramr = 1; tck2_tramr = 0; tckcut_tramr = 0; /*计数源供给 */ traic=2;/*中断级别*/ tstart_tracr = 1; /* 开始计时 */ while(tcstf_tracr != 1); } //#pragma INTERRUPT TimerRAHandler()vect=22 void TimerRAHandler(void) { ir_traic=0; num=num+1; //p2_5 ^= 1; } 我的程序的目的是用定时器控制p2_5的灯的亮灭,我用芯片是R8c25群晶振是20M的,这样计时的结果是0.5s吗?为什么这样的定时器中断程序 不出现中断呢? 请各位高手帮忙指点下,小弟不胜感激!!



关键词: 瑞萨     单片机     中断     处理    

专家
2011-04-19 14:15:12     打赏
2楼
没有用过这个系列用的是1A/1B系列,用的还是汇编,当时是因为新打开一个中断,但是也是没有产生中断,后来加了这个就ok了
mov.b   #00000000b  ,PUR0//不提供上拉
mov.b   #00000100b,INT1IC//中断1的控制
.lword tmzd         ; vector 25 ;

专家
2011-04-19 14:21:08     打赏
3楼
0.5s的计算的话应该是,单周期指令时间的累计,可以这样
利用定时器产生一个硬中断 5ms,这样100次记数就结果了

菜鸟
2011-04-19 17:24:16     打赏
4楼
可是那个怎么不能中断呢?而且不能达到给一个口不停的送高低电平呢?

高工
2011-06-22 10:46:02     打赏
5楼
期待最侍答案.

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]