2、SPDAT = SPDAT两个形式相同,含义却不同。因为发送缓冲和接收缓冲,一个只写,一个只读。所衡戚以,没有必要安排两个寄存器分别存放。而是复用了一个地哪敬址。左咐缓陵边的是发送缓冲,可以被赋值,如SPDAT =0x11表示发数据0x11。右边的是接收缓冲,如i=SPDAT表示接收到的内容读取到i变量中。=赋值语句,是有要求的,左边和右边是不同的。比如0=i就是不合法的。这样你能理解了为什么是SPDAT = SPDAT了吧。就是把收到的内容再写到发缓冲的意思。
//摘要: 掌握 UART0配置及使用,程序中将UART0 配置到P0.0、 P0.1。利中岁用串口调试助手,波特率设置为4800,并选择十六进制发送和显示,十六进制发送为偶数个,不然会少返回一个数,详见程序注释。#include "c8051f020.h"
unsigned char data1
void SYSCLK_Init()
void PORT_Init()
void UART0_Init()
void SYSCLK_Init()
{
unsigned int i
OSCXCN=0X67//0X67=0110,0111
for(i=0i<256i++)//等待>1ms
while(!(OSCXCN&0X80)) //等待XTLVLD变为1
OSCICN=0X88//时钟失效监测器,选择外部时钟源作为系统时钟
}
void PORT_Init()
{
XBR0 = 0x27/*交叉开关配置,URAT总线TX0置到P0.0口,RX0置到P0.1口, SPI总线SCK配置到P0.2口,
MOSI为P0.4口卖袜睁, NSS为P0.5,MISO配置到P0.3口,IIC总线SDA置到P0.6口�SCK置到P0.7 TX1,RX1配置到P1.0,P1.1,CEX0,CEX1,配置到P1.2,P1.3,外部中断int0配置到P1.4 */
XBR1 = 0x04
XBR2 = 0x44 /*允许功能选择开关有效*/
P0MDOUT = 0x1A/*SCK、MOSI和NSS为推拉式输出,MISO为开漏式.*/
P74OUT =0xff
}
void UART0_Init()
{
SCON0=0x50 //串口方式1
TMOD=0X20//选用定时器1作为波特率发好桥生器
TH1=0xF4 //波特率为4800
TL1=0xF4
ES0=1 //开启串口中断0
TF1=0
TR1=1 //定时器启动
PCON=0X80//波特率加倍 波特率为9600
TI0=1
}
void UART0_ISR() interrupt 4 using 1
{
if(RI0)
{
RI0=0//中断接收标志清零
data1=SBUF0//接收数据
SBUF0=data1//发送数据
while(TI0==0)
TI0=0//发送标志清零
}
}
main()
{
WDTCN=0XDE
WDTCN=0XAD
SYSCLK_Init()
PORT_Init()
UART0_Init()
EA=1
while(1)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)