收藏 分销(赏)

飞思卡尔8位单片机MC9S0810程序定时溢出中断编程C语言程序例.doc

上传人:xrp****65 文档编号:7719698 上传时间:2025-01-13 格式:DOC 页数:3 大小:38.50KB 下载积分:10 金币
下载 相关 举报
飞思卡尔8位单片机MC9S0810程序定时溢出中断编程C语言程序例.doc_第1页
第1页 / 共3页
飞思卡尔8位单片机MC9S0810程序定时溢出中断编程C语言程序例.doc_第2页
第2页 / 共3页


点击查看更多>>
资源描述
10.2.3 定时溢出中断编程C语言程序例 (1)定时溢出中断编程C语言程序例主程序 实例编号:C05_1 路径:\C\C05_1定时器溢出中断 (Timer1.prj) /*-----------------------------------------------------* *工 程 名:Timer1.prj * *硬件连接:无 * *程序描述:1.从串口接收表示时间的3字节数据 * * 2.利用定时器溢出中断修改时间,并发送新时间 * *目 的:学习定时器基本功能 * *---------《嵌入式应用技术基础教程》教学实例----------*/ //头文件 #include "GP32C.H" #include "SCI.h" //串行通信子程序头文件 //有关寄存器位定义 #define TSTOPBit 5 //定时器计数停止位 #define TOFBit 7 //定时器溢出标志位 //函数声明 extern void SCIInit(void); extern void SCISendN(unsigned char n,unsigned char ch[]); void Timer1init(void); unsigned char time[3]; //存放时、分、秒 //*====================================================* //*[主程序] void main() { unsigned char i; unsigned char j; asm("SEI"); //关总中断 SCIInit(); Timer1init(); //调定时器1初始化子程序 SCC2|=(1<<5); //令SCC2.5=1,允许接收中断 asm("CLI"); //开总中断 //给时分秒赋初始值 time[0]=0; time[1]=0; time[2]=0; i=time[2]; while(1) { j=time[2]; if (i!=j) //数组已经更新 {SCISendN(3,time); i=j;} //发送新数据 } } /*[内部直接调用子程序存放处]*/ /*Timer1init:定时器1初始化子程序-----------------------* *功能:对定时器1初始化 * *参数:无 * *返回:无 * *-----------------------------------------------------*/ void Timer1init(void) { //允许溢出中断、不启动计数、分频因子=64 T1SC=0b01100110; //计数寄存器初值=0x0000 T1CNTH=0x00; T1CNTL=0x00; //1秒产生1次溢出中断,计数寄存器=1×(2457600/64)=9600 T1MODH=0x96; T1MODL=0x00; //允许定时器1计数寄存器计数 T1SC&=~(1<<TSTOPBit); } (2)定时溢出中断编程C语言程序例矢量表文件 定时溢出中断编程C语言程序例矢量表文件(vectors08.c) /*-----------------------------------------------------* *文件名:vectors08.c * *功 能:用于定义中断矢量表 * *-----------------------------------------------------*/ #include "GP32C.H" #include "SCI.h" //串行通信头文件 /*[相应寄存器定义]*/ #define TSTOPBit 5 //定时器计数停止位 #define TOFBit 7 //定时器溢出标志位 /*isrTIMER1:定时器溢出中断处理函数---------------------* *功 能:给内存单元Time[0-2](时分秒)赋值 * *-----------------------------------------------------*/ extern unsigned char time[3]; //H M S #pragma interrupt_handler isrTIMER1 void isrTIMER1(void) { unsigned char i; asm("SEI"); //关总中断 //------------------------------ time[2]++; //秒数加1 if (time[2]!=60) goto isrTIMER1_exit; //秒数未增加到60,转 time[2]=0; time[1]++; //秒数增加到60,清0,分钟数加1 if (time[1]!=60) goto isrTIMER1_exit; //分钟数未增到60,转 time[1]=0; time[0]++; //分钟数增加到60,清0,小时数加1 if (time[0]!=24) goto isrTIMER1_exit; //小时数未增到24,转 time[0]=0; //时数增加到24,清0 isrTIMER1_exit: //------------------------------ //清除定时器溢出标志位 T1SC&=~(1<<TOFBit); asm("CLI"); //开总中断 } /*isrRe:接收中断处理函数-------------------------------* *功 能:接收3字节基准时分秒放入内存单元Time[0-2] * *-----------------------------------------------------*/ #pragma interrupt_handler isrRe void isrRe(void) { asm("SEI"); //禁止所有中断 //接收数据 SCIReN(3,time); asm("CLI"); //开放总中断 } //未定义的中断处理函数,本函数不能删除 #pragma interrupt_handler isrDummy void isrDummy(void) { } #pragma abs_address:0xffdc //中断向量表起始地址 void (* const _vectab[])(void) = { isrDummy, //时基中断 isrDummy, //AD转换中断 isrDummy, //键盘中断 isrDummy, //SCI TC/TE isrRe, //SCI RF/IDLE isrDummy, //SCI PE/FE/NF/OR isrDummy, //SPI TE isrDummy, //SPI MOD/OVR/RF isrDummy, //TIM2溢出中断 isrDummy, //TIM2通道1 isrDummy, //TIM2通道0 isrTIMER1, //TIM1溢出中断 isrDummy, //TIM1通道1 isrDummy, //TIM1通道0 isrDummy, //CGM isrDummy, //IRQ isrDummy //SWI //RESET也是中断,定义在 crt08.o中 }; #pragma end_abs_address
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服