char putchar(char c) { while(!TI); TI=0; return(SBUF = c); }完整代码如下所示 复制#include<SC95F861X.H> #include<stdio.h> void delay(void); void Timer0_Init(void); void Uart_Init(unsigned int Freq,unsigned long int baud); bit UartSendFlag = 0; //发送中断标志位 bit UartReceiveFlag = 0; //接收中断标志位 char putchar(char c) { while(!TI); TI=0; return(SBUF = c); } void main(void) { Timer0_Init(); Uart_Init(32,9600); while(1) { // SBUF = 0x55; // while(!UartSendFlag); // UartSendFlag=0; /*因为调用的putchar()会先判断是否发送完成,所以这里先置位TI,确保能进入发送环节*/ TI=1; printf("Hello World !\n"); delay(); } } /***************************************************** *函数名称:void Uart_Init(uint Freq,unsigned long int baud) *函数功能:Uart中断初始化 *入口参数:Freq-主频,baud-波特率 *出口参数:void *****************************************************/ void Uart_Init(unsigned int Freq,unsigned long int baud) //选择Timer1作为波特率信号发生器 { P2CON &= 0xFC; //TX/RX设置为输入带上拉 P2PH |= 0x03; SCON |= 0X50; //设置通信方式为模式一,允许接收 TMCON |= 0X02; //定时器TI频率源自fsys即32Mhz TH1 = (Freq*1000000/baud)>>8; //波特率为T1的溢出时间; TL1 = Freq*1000000/baud; TR1 = 0; ET1 = 0; EUART = 1; //开启Uart中断 EA = 1; } void delay(void) { //设置为320,延时0.5S,设置到80即延时0.125S,8个IO口跑马灯则每个IO的闪烁频率刚好是1Hz int i=320; TR0=1; while(i--) { TL0 = (65536 - 50000)%256; //时钟为Fsys,则溢出时间=50000*(1/Fsys); TH0 = (65536 - 50000)/256; while(TF0==0); TF0=0; } TR0=0; } void Timer0_Init(void) { /* TCON,定时器控制寄存器, |TF1|TR1|TF0|TR0|---|IE1|-|IE0|-| TMOD,定时器工作模式寄存器,|- |C/T1|M11|M01|---|C/T0|M10|M00| 模式0:13位定时器计数器模式 模式1:16位定时器计数器模式 模式2:8位自动重载模式 模式3:两个8位定时器计数器模式 */ //设置定时器0工作模式1 TMOD |= 0x01; //设置定时器0时钟源不分频,32MHz;默认是12分频 TMCON |= 0x01; }
#include<SC95F861X.H> #include<stdio.h> void delay(void); void Timer0_Init(void); void Uart_Init(unsigned int Freq,unsigned long int baud); bit UartSendFlag = 0; //发送中断标志位 bit UartReceiveFlag = 0; //接收中断标志位 char putchar(char c) { while(!TI); TI=0; return(SBUF = c); } void main(void) { Timer0_Init(); Uart_Init(32,9600); while(1) { // SBUF = 0x55; // while(!UartSendFlag); // UartSendFlag=0; /*因为调用的putchar()会先判断是否发送完成,所以这里先置位TI,确保能进入发送环节*/ TI=1; printf("Hello World !\n"); delay(); } } /***************************************************** *函数名称:void Uart_Init(uint Freq,unsigned long int baud) *函数功能:Uart中断初始化 *入口参数:Freq-主频,baud-波特率 *出口参数:void *****************************************************/ void Uart_Init(unsigned int Freq,unsigned long int baud) //选择Timer1作为波特率信号发生器 { P2CON &= 0xFC; //TX/RX设置为输入带上拉 P2PH |= 0x03; SCON |= 0X50; //设置通信方式为模式一,允许接收 TMCON |= 0X02; //定时器TI频率源自fsys即32Mhz TH1 = (Freq*1000000/baud)>>8; //波特率为T1的溢出时间; TL1 = Freq*1000000/baud; TR1 = 0; ET1 = 0; EUART = 1; //开启Uart中断 EA = 1; } void delay(void) { //设置为320,延时0.5S,设置到80即延时0.125S,8个IO口跑马灯则每个IO的闪烁频率刚好是1Hz int i=320; TR0=1; while(i--) { TL0 = (65536 - 50000)%256; //时钟为Fsys,则溢出时间=50000*(1/Fsys); TH0 = (65536 - 50000)/256; while(TF0==0); TF0=0; } TR0=0; } void Timer0_Init(void) { /* TCON,定时器控制寄存器, |TF1|TR1|TF0|TR0|---|IE1|-|IE0|-| TMOD,定时器工作模式寄存器,|- |C/T1|M11|M01|---|C/T0|M10|M00| 模式0:13位定时器计数器模式 模式1:16位定时器计数器模式 模式2:8位自动重载模式 模式3:两个8位定时器计数器模式 */ //设置定时器0工作模式1 TMOD |= 0x01; //设置定时器0时钟源不分频,32MHz;默认是12分频 TMCON |= 0x01; }
收藏1 举报
#include<SC95F861X.H> #include<stdio.h> void delay(void); void Timer0_Init(void); void Uart_Init(unsigned int Freq,unsigned long int baud); bit UartSendFlag = 0; //发送中断标志位 bit UartReceiveFlag = 0; //接收中断标志位 char putchar(char c) { while(!TI); TI=0; return(SBUF = c); } char getchar(void) { while(!RI); RI=0; return(SBUF); } void main(void) { int aa=0; Timer0_Init(); Uart_Init(32,9600); while(1) { // SBUF = 0x55; // while(!UartSendFlag); // UartSendFlag=0; /*因为调用的putchar()会先判断是否发送完成,所以这里先置位TI,确保能进入发送环节*/ TI=1; printf("Hello World !\n"); aa=getchar(); printf("AA=%d \n",aa); delay(); } } /***************************************************** *函数名称:void Uart_Init(uint Freq,unsigned long int baud) *函数功能:Uart中断初始化 *入口参数:Freq-主频,baud-波特率 *出口参数:void *****************************************************/ void Uart_Init(unsigned int Freq,unsigned long int baud) //选择Timer1作为波特率信号发生器 { P2CON &= 0xFC; //TX/RX设置为输入带上拉 P2PH |= 0x03; SCON |= 0X50; //设置通信方式为模式一,允许接收 TMCON |= 0X02; //定时器TI频率源自fsys即32Mhz TH1 = (Freq*1000000/baud)>>8; //波特率为T1的溢出时间; TL1 = Freq*1000000/baud; TR1 = 0; ET1 = 0; EUART = 1; //开启Uart中断 EA = 1; } void delay(void) { //设置为320,延时0.5S,设置到80即延时0.125S,8个IO口跑马灯则每个IO的闪烁频率刚好是1Hz int i=320; TR0=1; while(i--) { TL0 = (65536 - 50000)%256; //时钟为Fsys,则溢出时间=50000*(1/Fsys); TH0 = (65536 - 50000)/256; while(TF0==0); TF0=0; } TR0=0; } void Timer0_Init(void) { /* TCON,定时器控制寄存器, |TF1|TR1|TF0|TR0|---|IE1|-|IE0|-| TMOD,定时器工作模式寄存器,|- |C/T1|M11|M01|---|C/T0|M10|M00| 模式0:13位定时器计数器模式 模式1:16位定时器计数器模式 模式2:8位自动重载模式 模式3:两个8位定时器计数器模式 */ //设置定时器0工作模式1 TMOD |= 0x01; //设置定时器0时钟源不分频,32MHz;默认是12分频 TMCON |= 0x01; }
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
等级类勋章
发帖类勋章
时间类勋章
人才类勋章
2052
16403
222
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号