- /*uart.c*/
- #define uc unsigned char
- #define ui unsigned int
- #define ul unsigned long
- #define iuc idata unsigned char
- #define iui idata unsigned int
- #define iul idata unsigned long
- #define bt bit
- #define swch switch
- #define cs case
- #define whl while
- #define rtn return
- #define brk break
- #define itrpt interrupt
- uart_init(bt xos)
- {
- if(xos==1)
- {
- P_SW2|=0x80; /*啟動內部擴展區寄存器訪問功能*/
- XOSCCR|=0xc0; /*啟動外部晶振*/
- while(!(XOSCCR & 1)); /*待晶振頻率穩定*/
- CLKDIV=0x00; /*晶振不分頻*/
- CKSEL=0x01; /*選用外部晶振*/
- }
- SCON=0x50; /*設定串口工作方式*/
- TMOD|=0x21; /*設置T0T1寄存器*/
- AUXR=0xfc; /*配置輔助寄存器*/
- TL1=TH1=0xdc; /*設置波特率為9.6kbit/s*/
- TR1=1;
- REN=1; /*允許接收串口數據*/
- EA=1; /*打開總中斷*/
- ES=1; /*打開串口中斷*/
- P3M1=0x01; /*00000001*/
- P3M0=0x02; /*00000010,將串口接收口設為高阻輸入模式,發送口設置為強推挽模式*/
- }
- uart_txd(uc buf[])
- {
- iui i;
- iui j=sizeof(buf);
- TI=RI=0;
- for(i=0;i<j;i++)
- {
- SBUF=buf[i];
- while(TI==0)
- {
- ;
- }
- TI=0;
- }
- }
- /*—————————————兩個文件的分割線—————————————*/
- /*main.c*/
- #include <STC8x.H>
- #include <UART.H>
- iui txdbuf[13]={'H','E','L','L','O',' ','W','O','R','L','D','!','\0'};
- main()
- {
- uart_init(0);
- while(1)
- {
- uart_txd(txdbuf);
- }
- }
復制代碼 |