1、10.2.3 定时溢出中断编程C语言程序例(1)定时溢出中断编程C语言程序例主程序实例编号:C05_1 路径:CC05_1定时器溢出中断 (Timer1.prj)/*-*工 程 名:Timer1.prj *硬件连接:无 *程序描述:1.从串口接收表示时间的3字节数据 * 2.利用定时器溢出中断修改时间,并发送新时间 *目 的:学习定时器基本功能 *-嵌入式应用技术基础教程教学实例-*/头文件#include GP32C.H#include SCI.h /串行通信子程序头文件/有关寄存器位定义#define TSTOPBit 5 /定时器计数停止位#define TOFBit 7 /定时器溢出标
2、志位/函数声明extern void SCIInit(void);extern void SCISendN(unsigned char n,unsigned char ch);void Timer1init(void);unsigned char time3; /存放时、分、秒/*=*/*主程序void main() unsigned char i; unsigned char j; asm(SEI); /关总中断 SCIInit(); Timer1init(); /调定时器1初始化子程序 SCC2|=(15); /令SCC2.5=1,允许接收中断 asm(CLI); /开总中断 /给时分秒赋
3、初始值 time0=0; time1=0; time2=0; i=time2; while(1) j=time2; 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(245
4、7600/64)=9600 T1MODH=0x96; T1MODL=0x00; /允许定时器1计数寄存器计数 T1SC&=(1TSTOPBit); (2)定时溢出中断编程C语言程序例矢量表文件定时溢出中断编程C语言程序例矢量表文件(vectors08.c)/*-*文件名:vectors08.c *功 能:用于定义中断矢量表 *-*/#include GP32C.H#include SCI.h /串行通信头文件/*相应寄存器定义*/#define TSTOPBit 5 /定时器计数停止位#define TOFBit 7 /定时器溢出标志位/*isrTIMER1:定时器溢出中断处理函数-*功 能:
5、给内存单元Time0-2(时分秒)赋值 *-*/extern unsigned char time3; /H M S#pragma interrupt_handler isrTIMER1void isrTIMER1(void) unsigned char i; asm(SEI); /关总中断 /- time2+; /秒数加1 if (time2!=60) goto isrTIMER1_exit; /秒数未增加到60,转 time2=0; time1+; /秒数增加到60,清0,分钟数加1 if (time1!=60) goto isrTIMER1_exit; /分钟数未增到60,转 time1
6、=0; time0+; /分钟数增加到60,清0,小时数加1 if (time0!=24) goto isrTIMER1_exit; /小时数未增到24,转 time0=0; /时数增加到24,清0 isrTIMER1_exit: /- /清除定时器溢出标志位 T1SC&=(1TOFBit); asm(CLI); /开总中断/*isrRe:接收中断处理函数-*功 能:接收3字节基准时分秒放入内存单元Time0-2 *-*/#pragma interrupt_handler isrRe void isrRe(void) asm(SEI); /禁止所有中断 /接收数据 SCIReN(3,time)
7、; 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/ORisrDummy, /SPI TE isrDummy, /SPI MOD/OVR/RFisrDummy, /TIM2溢出中断 isrDummy, /TIM2通道1isrDummy, /TIM2通道0isrTIMER1, /TIM1溢出中断 isrDummy, /TIM1通道1isrDummy, /TIM1通道0isrDummy, /CGM isrDummy, /IRQ isrDummy /SWI /RESET也是中断,定义在 crt08.o中 ;#pragma end_abs_address