不支持 USB就直接用串口就可以。
-
- #include "AI8051U.h"
- #include "stdio.h"
- #include "intrins.h"
-
- typedef unsigned char u8;
- typedef unsigned int u16;
- typedef unsigned long u32;
-
- //#define MAIN_Fosc 22118400L //定义主时钟
- #define MAIN_Fosc 40000000UL //定义主时钟
-
- //==========================================================================
-
- #define Baudrate1 (65536 - MAIN_Fosc / 115200 / 4)
-
- #define UART1_BUF_LENGTH 128
-
- //==========================================================================
-
- /************* 本地常量声明 **************/
-
-
- /************* IO口定义 **************/
-
- /************* 本地变量声明 **************/
-
- u8 TX1_Cnt; //发送计数
- u8 RX1_Cnt; //接收计数
- bit B_TX1_Busy; //发送忙标志
-
- u8 RX1_Buffer[UART1_BUF_LENGTH]; //接收缓冲
-
- /************* 本地函数声明 **************/
-
- void UART1_config(u8 brt); // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
- void PrintString1(u8 *puts);
-
- /**************** 外部函数声明和外部变量声明 *****************/
-
-
- /******************** 主函数 **************************/
- void main(void)
- {
- WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
- EAXFR = 1; //扩展寄存器(XFR)访问使能
- CKCON = 0; //提高访问XRAM速度
-
- P0M1 = 0x00; P0M0 = 0x00; //设置为准双向口
- P1M1 = 0x00; P1M0 = 0x00; //设置为准双向口
- P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口
- P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口
- P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口
- P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口
- P6M1 = 0x00; P6M0 = 0x00; //设置为准双向口
- P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口
-
- UART1_config(2); // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
- EA = 1; //允许全局中断
-
- PrintString1("AI8051U UART1 Test Programme!\r\n"); //UART1发送一个字符串
-
- printf("HHHHH\r\n");
- while (1)
- {
- if((TX1_Cnt != RX1_Cnt) && (!B_TX1_Busy)) //收到数据, 发送空闲
- {
- SBUF = RX1_Buffer[TX1_Cnt];
- B_TX1_Busy = 1;
- if(++TX1_Cnt >= UART1_BUF_LENGTH) TX1_Cnt = 0;
- }
- }
- }
-
- //========================================================================
- // 函数: void PrintString1(u8 *puts)
- // 描述: 串口1发送字符串函数。
- // 参数: puts: 字符串指针.
- // 返回: none.
- // 版本: VER1.0
- // 日期: 2014-11-28
- // 备注:
- //========================================================================
- void PrintString1(u8 *puts)
- {
- for (; *puts != 0; puts++) //遇到停止符0结束
- {
- SBUF = *puts;
- B_TX1_Busy = 1;
- while(B_TX1_Busy);
- }
- }
-
- //串口1开中断:串口 printf 函数 使用
- char putchar(char c)
- {
- B_TX1_Busy = 1;
- SBUF = c;
- while(B_TX1_Busy);
- return c;
- }
-
- //========================================================================
- // 函数: SetTimer2Baudraye(u32 dat)
- // 描述: 设置Timer2做波特率发生器。
- // 参数: dat: Timer2的重装值.
- // 返回: none.
- // 版本: VER1.0
- // 日期: 2014-11-28
- // 备注:
- //========================================================================
- void SetTimer2Baudraye(u32 dat)
- {
- T2R = 0; //Timer stop
- T2_CT = 0; //Timer2 set As Timer
- T2x12 = 1; //Timer2 set as 1T mode
- T2H = (u8)(dat / 256);
- T2L = (u8)(dat % 256);
- ET2 = 0; //禁止中断
- T2R = 1; //Timer run enable
- }
-
- //========================================================================
- // 函数: void UART1_config(u8 brt)
- // 描述: UART1初始化函数。
- // 参数: brt: 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
- // 返回: none.
- // 版本: VER1.0
- // 日期: 2014-11-28
- // 备注:
- //========================================================================
- void UART1_config(u8 brt)
- {
- /*********** 波特率使用定时器2 *****************/
- if(brt == 2)
- {
- S1BRT = 1; //S1 BRT Use Timer2;
- SetTimer2Baudraye(Baudrate1);
- }
-
- /*********** 波特率使用定时器1 *****************/
- else
- {
- TR1 = 0;
- S1BRT = 0; //S1 BRT Use Timer1;
- T1_CT = 0; //Timer1 set As Timer
- T1x12 = 1; //Timer1 set as 1T mode
- TMOD &= ~0x30;//Timer1_16bitAutoReload;
- TH1 = (u8)(Baudrate1 / 256);
- TL1 = (u8)(Baudrate1 % 256);
- ET1 = 0; //禁止中断
- TR1 = 1;
- }
- /*************************************************/
-
- SCON = (SCON & 0x3f) | 0x40; //UART1模式, 0x00: 同步移位输出, 0x40: 8位数据,可变波特率, 0x80: 9位数据,固定波特率, 0xc0: 9位数据,可变波特率
- // PS = 1; //高优先级中断
- ES = 1; //允许中断
- REN = 1; //允许接收
- P_SW1 &= 0x3f;
- P_SW1 |= 0x00; //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7, 0xC0: P4.3 P4.4
-
- B_TX1_Busy = 0;
- TX1_Cnt = 0;
- RX1_Cnt = 0;
- }
-
-
- //========================================================================
- // 函数: void UART1_int (void) interrupt UART1_VECTOR
- // 描述: UART1中断函数。
- // 参数: nine.
- // 返回: none.
- // 版本: VER1.0
- // 日期: 2014-11-28
- // 备注:
- //========================================================================
- void UART1_int (void) interrupt 4
- {
- if(RI)
- {
- RI = 0;
- RX1_Buffer[RX1_Cnt] = SBUF;
- if(++RX1_Cnt >= UART1_BUF_LENGTH) RX1_Cnt = 0;
- }
-
- if(TI)
- {
- TI = 0;
- B_TX1_Busy = 0;
- }
- }
-
复制代码
直接用这个程序就可以。
Ai8051U_UART001.zip
(9.48 KB, 下载次数: 1)
|