61单片机项目 - 定时器Timer A/B
2015-09-07 09:40
369 查看
实现功能:设置不同的计数初值、不同的占空比和不同的时钟源,IOB8和一个发光二极管连接,用户通过观察二极管点亮的持续时间和熄灭持续的时间观察信号波形的占空比变化和频率。
实验现象:计数初值不同、占空比不同、时钟源不同,发光二极管的亮灭状态变化就不同。
拓展:使用汇编语言实现TimerB定时器实验:当输入时钟源频率分别为Fosc/2、Fosc/256、32768HZ、8192HZ、4096HZ时观察输出频率,设置不同的计数初值,使得每次的计数时间都为2s.
这个地方,大家需要了解定时器的机制就可以明白了
实验现象:计数初值不同、占空比不同、时钟源不同,发光二极管的亮灭状态变化就不同。
拓展:使用汇编语言实现TimerB定时器实验:当输入时钟源频率分别为Fosc/2、Fosc/256、32768HZ、8192HZ、4096HZ时观察输出频率,设置不同的计数初值,使得每次的计数时间都为2s.
这个地方,大家需要了解定时器的机制就可以明白了
#include "SPCE061A.H" #define uint unsigned int int main() { //if is Fosc/2(其余的可以自行改写计时器初始的值(间隔时间为1S)) uint count = 0; uint is = 0; *P_IOA_Dir = 0xffff; *P_IOA_Attrib = 0xffff; *P_IOA_Data = 0x0000; *P_TimerA_Ctrl = C_TMA1_FOSC_2 + C_TMA_PWM_D2; *P_TimerA_Data = 0xf9ff; *P_INT_Ctrl = C_IRQ1_TMA; asm("INT OFF");//这个汇编函数的使用时为了禁止开启中断函数,不是禁止开启中断 while(1) { if(*P_INT_Ctrl & C_IRQ1_TMA) { count ++; *P_INT_Clear = C_IRQ1_TMA; } if(count == 8000 * 2) { count = 0; is = !is; *P_IOA_Data = is; } *P_Watchdog_Clear = C_WDTCLR; } return 0; }
#include "SPCE061A.H"/此处的间隔时间为1S测试的计时器的频率为Fosc/256 #define uint unsigned int #define uint unsigned char int main() { uint rev = 0x0000,ncount = 0x0000; *P_IOA_Dir = 0x00ff; *P_IOA_Attrib = 0x00ff; *P_IOA_Data = 0x0000; *P_TimerA_Data = 0xfc17; *P_TimerA_Ctrl = C_TMA1_FOSC_256 + C_TMA_PWM_D3; *P_INT_Ctrl = C_IRQ1_TMA; asm("INT OFF"); while(1) { if(*P_INT_Ctrl & C_IRQ1_TMA) { ncount ++; *P_INT_Clear = C_IRQ1_TMA; } if(ncount == 48 * 4) { ncount = 0; rev = ~rev; *P_IOA_Data = rev; } *P_Watchdog_Clear = C_WDTCLR; } return 0; }
#include "SPCE061A.H"//以时基信息为频率(间隔为2S) #define uint unsigned int #define uint unsigned char int main() { uint rev = 0x0000,ncount = 0x0000; *P_IOA_Dir = 0x00ff; *P_IOA_Attrib=0x00ff; *P_IOA_Data=0x0000; *P_TimeBase_Setup=0x0000; *P_TimerA_Data=0xfffb; *P_TimerA_Ctrl=C_TMA_PWM_D3+C_TMA2_TMB1+C_TMA1_1; *P_INT_Ctrl=C_IRQ1_TMA; asm("INT OFF"); while(1) { if(*P_INT_Ctrl&C_IRQ1_TMA) { ncount++; *P_INT_Clear=C_IRQ1_TMA; } if(ncount==4) { ncount=0; rev=~rev; *P_IOA_Data=rev; } *P_Watchdog_Clear=C_WDTCLR; } return 0; }
相关文章推荐
- android 加载本地联系人实现方法
- Linux信号(signal) 机制分析
- 驱动开发(一)
- 让理科生沉默,让文科生流泪的综合题详解
- 三方转协议
- Hibernate配置错误处理
- nginx相同端口多站点配置
- sharepoint 2016 学习系列篇(11)-如何检验用户在系统中的权限Check Permissions
- Unix,Linux 添加用户
- javascript 整型与字符串比较大小
- 用U盘打造CentOS7和Windows7双系统
- AD域信息查询工具
- 关于hashCode
- sharepoint 2016 学习系列篇(10)-给子网站单独授权用户访问权限
- 排序
- js实现全国省份城市级联下拉菜单效果代码
- SIGSEGV和SIGBUS
- 冬天来了,要加强锻炼,克服身体酸麻,懒散,多学习专业知识,不为生活,为了活着。
- markdows编辑器使用
- 移动端如何调用服务端