TPM_CSTR(1) &=~(TPM1SC_TOF_MASK); EnableInterrupt(); } /*
interrupt void isrSCIre(void){ uint8 temp; uint8 SerialBuff[1]; DisableInterrupt();
temp = SCIReN(1,1,SerialBuff); if(temp==0)SCISendN(1,1,SerialBuff); EnableInterrupt(); } */
//未定义的中断处理函数,本函数不能删除 interrupt void isrDummy(void) { }
//中断处理子程序类型定义 typedef void( *ISR_func_t)(void);
//中断矢量表,如果需要定义其它中断函数,请修改下表中的相应项目const ISR_func_t ISR_vectors[] @0xFFCC = {
isrDummy, // 0xFFCC //时基中断 isrDummy, // 0xFFCE //IIC中断 isrDummy, // 0xFFD0 //ADC转换中断 isrDummy, // 0xFFD2 //键盘中断 isrDummy, // 0xFFD4 //SCI2发送中断 isrDummy, // 0xFFD6 //SCI2接收中断 isrDummy, // 0xFFD8 //SCI2错误中断 isrDummy, // 0xFFDA //SCI1发送中断
10
// isrSCIre, // 0xFFDC //SCI1接收中断 isrDummy, // 0xFFDC //SCI1接收中断 isrDummy, // 0xFFDE //SCI1错误中断 isrDummy, // 0xFFE0 //SPI中断 isrDummy, // 0xFFE2 //TPM2溢出中断
isrDummy, // 0xFFE4 //TPM2通道1输入捕捉/输出比较中断 isrDummy, // 0xFFE6 //TPM2通道0输入捕捉/输出比较中断 isrT1Out, // 0xFFE8 //TPM1溢出中断 // isrDummy, // 0xFFE8 //TPM1溢出中断
isrDummy, // 0xFFEA //TPM1通道5输入捕捉/输出比较中断 isrDummy, // 0xFFEC //TPM1通道4输入捕捉/输出比较中断 isrDummy, // 0xFFEE //TPM1通道3输入捕捉/输出比较中断 isrDummy, // 0xFFF0 //TPM1通道2输入捕捉/输出比较中断 isrDummy, // 0xFFF2 //TPM1通道1输入捕捉/输出比较中断 isrDummy, // 0xFFF4 //TPM1通道0输入捕捉/输出比较中断 isrDummy, // 0xFFF6 //ICG的PLL锁相状态变化中断 isrDummy, // 0xFFF8 //低电压检测中断 isrDummy, // 0xFFFA //IRQ引脚中断 isrDummy // 0xFFFC //SWI指令中断
//RESET是特殊中断,其向量由开发环境直接设置(在本软件系统的Start08.o文件中) };
Timer.h:
#ifndef timeR_H #define timeR_H
#include #include
#define TPM_CSTR(x)(*(vuint8 *)(0x00000020+(x-1)*64)) #define TPM_CNTH(x)(*(vuint8 *)(0x00000021+(x-1)*64))
11
#define TPM_CNTL(x)(*(vuint8 *)(0x00000022+(x-1)*64)) #define TPM_MODH(x)(*(vuint8 *)(0x00000023+(x-1)*64)) #define TPM_MODL(x)(*(vuint8 *)(0x00000024+(x-1)*64)) #define EnabletimerInt(x) TPM_CSTR(x) |= TPM1SC_TOIE_MASK #define DisabletimerInt(x) TPM_CSTR(x) &=~TPM1SC_TOIE_MASK #define TPM_NUM_1 1 #define TPM_NUM_2 2 #define TPM1_CH_0 0 #define TPM1_CH_1 1 #define TPM1_CH_2 2 #define TPM1_CH_3 3 #define TPM1_CH_4 4 #define TPM1_CH_5 5 #define TPM2_CH_0 0 #define TPM2_CH_1 1 void TPMinit(uint8 TPMNo); void SecAdd1(uint8 *p); #endif
Timer.c:
#include
void TPMinit(uint8 TPMNo){ if(TPMNo > 2) TPMNo = 2; else if(TPMNo < 1) TPMNo=1;
TPM_CSTR(TPMNo)=0b00010110; TPM_CNTH(TPMNo) = 0x00; TPM_CNTL(TPMNo) = 0x00; TPM_MODH(TPMNo) = 0x7A;
12
TPM_MODL(TPMNo) = 0x12; }
void SecAdd1(uint8 *p){ *(p+7)+=1; if(*(p+7)>9){ *(p+7) = 0; *(p+6)+=1; if(*(p+6)>5){ *(p+6)=0; *(p+4) += 1; // if(*p>=24) // *p = 0; if(*(p+4)>9){ *(p+4)=0; *(p+3)+=1; if(*(p+3)>5){ *(p+3)=0; *(p+1)+=1; if(*(p+1)>9){ *(p+1)=0; *p+=1;
if(*(p+1)==4&&*p==2){ *(p+1)=0; *p=0; } } } } } }
13
}
3.1.1串行通信子程序
SCI.h:
#ifndef SCI_H #define SCI_H
#include #include
#define SCI_BDH(x) (*(vuint8 *)(0x00000038+(x-1)*8)) #define SCI_BDL(x) (*(vuint8 *)(0x00000039+(x-1)*8)) #define SCI_C1(x) (*(vuint8 *)(0x0000003A+(x-1)*8)) #define SCI_C2(x) (*(vuint8 *)(0x0000003B+(x-1)*8)) #define SCI_S1(x) (*(vuint8 *)(0x0000003C+(x-1)*8)) #define SCI_S2(x) (*(vuint8 *)(0x0000003D+(x-1)*8)) #define SCI_C3(x) (*(vuint8 *)(0x0000003E+(x-1)*8)) #define SCI_D(x) (*(vuint8 *)(0x0000003F+(x-1)*8)) #define EnableSCIReInt() SCI1C2 |=(SCI1C2_RIE_MASK) #define DisableSCIReInt() SCI1C2 &=~(SCI1C2_RIE_MASK) #define SCI_NUM_1 1 #define SCI_NUM_2 2
void SCIInit(uint8 SCINo,uint8 sysclk,uint16 baud); void SCISend1(uint8 SCINo,uint8 ch);
void SCISendN(uint8 SCINo,uint16 n,uint8 ch[]); uint8 SCIRe1(uint8 SCINo,uint8 *p);
uint8 SCIReN(uint8 SCINo,uint16 n,uint8 ch[]); void SCISendString(uint8 SCINo,char *p); #endif
SCI.c:
14
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库AW60单片机课程设计(3)在线全文阅读。
相关推荐: