发布时间 : 星期五 文章嵌入式应用实例 - 图文更新完毕开始阅读
#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:
#include \
void SCIInit(uint8 SCINo, uint8 sysclk, uint16 baud) {
uint16 ubgs; ubgs=0; if(SCINo>2) { SCINo=2; }
15
ubgs=sysclk*(10000/(baud/100))/16;
SCI_BDH(SCINo)=(uint8)((ubgs&0xFF00)>>8); SCI_BDL(SCINo)=(uint8)(ubgs&0x00FF); SCI_C1(SCINo)=0b00000000; SCI_C2(SCINo)=0b00001100; }
void SCISend1(uint8 SCINo, uint8 ch) { if(SCINo>2) { SCINo=2; }
while(!(SCI_S1(SCINo)&0b1000000)); SCI_D(SCINo)=ch; }
uint8 SCIRe1(uint8 SCINo, uint8 *p) { uint16 k; uint8 i; if(SCINo>2){ SCINo=2; }
for(k=0;k<0xfbbb;k++)
if((SCI_S1(SCINo)&0b00100000)!=0) { i=SCI_D(SCINo); *p=0x00; break; }
if(k>=0xfbbb) { i=0xff; *p=0x01; } return i;
16
}
void SCISendN(uint8 SCINo, uint16 n, uint8 ch[]) { uint16 i; if(SCINo>2) { SCINo=2; }
for(i=0;i uint8 SCIReN(uint8 SCINo, uint16 n, uint8 ch[]) { uint16 m; uint8 fp; m=0; if(SCINo>2) { SCINo=2; } while(m ch[m]=SCIRe1(SCINo,&fp); if(fp==1) { return 1; } m++; } return 0; } void SCISendString(uint8 SCINo, char *p) { uint32 k; if(SCINo>2) { SCINo=2; } 17 if(p==0) return; for(k=0;p[k]!='\\0';++k) { SCISend1(SCINo,p[k]); } } 3.1.2 LCD子程序 LCD.h: #ifndef LCD_H #define LCD_H #include \#include \#include \#define LCDdata PTAD #define LCDdataD PTADD #define LCDctrl1 PTCD #define LCDctrlD1 PTCDD #define LCDctrl2 PTFD #define LCDctrlD2 PTFDD #define LcdRS 4 #define LcdRW 6 #define LcdE 6 void LCDinit(void); void LCDcommand(uint8 cmd); void LCDshow(uint8 str[]); #endif LCD.c: #include \ 18