如何对串口SCI编程.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:4 大小:252KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

如何对串口SCI编程.pdf

如何对串口SCI编程.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

哈工大嵌入式开发hitele.taobao.com相关知识讲解:你肯定见过台式机箱后面的九针插头,以前计算机和外设都是通过它通信的,现在逐步被usb取代,但是串口也是有自己的优势的,一是咱们上位机编程容易,而是传输距离远,你很少见过usb有很长的线吧。SCI是serialcommunicationinterface的缩写,也就是串行通信接口的意思。所谓串行,就是数据在发送和接受的时候,是一位一位进行的,当然对于我们编程来说,这些对我们没有影响。先说说串口通信的硬件设计吧,单片机出来的SCITX和SCIRX都是0V或5v而电脑的串口电平我原来测试过,是+10V或-10V,他们两个不能直接连接,所以需要一个电平转换芯片,通常我们采用MAX232.TXD0接到单片机串口发送端,RXD0接到单片机接收端,DB_TX接到九针插头的2脚,DBRX接3脚,GND接5脚,九针插头和电脑连接,这样单片机和计算机就能通信啦。怎么在电脑上看串口接收到的数据呢,这时就需要一款串口调试软件,我在资料里面给了。好了下面将单片机编程。要实现串口通信,最关键的就是实现波特率的匹配,也就是传输速度要一致,电脑设置串口波特率为9600,你单片机就要设成9600才能通信,当然你设成9601也问哈工大嵌入式开发hitele.taobao.com题不大,不是100%精确才能通信的,尽量吧!手册420页中给出了串口波特率设置公式:SCIbusclock就是以前提到的fBUS,在前面定时器和PLL实验中都讲过,PLL实验中我们将fBUS设置成了40M。SCIBR[12:0]由SCIBDH和SCIBDL决定(手册中406页),这SCIBDH设置[12:8],SCIBDL设置[7:0],一共13位。假如我们现在要设置波特率为9600,怎么设置呢?9600=40000000/(16*SCIBR[12:0])SCIBR[12:0]=40000000/16/9600=260260的十六进制是104H,也就是SCIBDH=0x01,SCIBDL=0x04.除了波特率寄存器外,还有两个寄存器比较重要,SCI0CR1和SCI0CR2LOOPS置1:SCI的发送端在内部直接接到SCI的发送端,也就是自发自收,这主要用来编程期间对程序进行测试。清0就进入正常模式。M=0:SCI总线发送了1个起始位8个数据位和一个结束位M=1:SCI总线发送了1个起始位9个数据位和一个结束位PE=1:启用奇偶校验PE=0:禁止奇偶校验PT用来选择是采用奇校验还是偶校验。关于奇偶校验您可以百度一下,这里不做阐述了。哈工大嵌入式开发hitele.taobao.comTIE=1:使能发送数据为空中断,也就是现在发送数据寄存器可以接收新数据了,你可以发送新数据了。TCIE=1:使能发送完成中断,告诉你发送结束啦RIE=1:使能接收中断TE=1:发送使能RE=1:接收使能最后一个重要的寄存器就是状态寄存器SCI0SR1TDRE=1:标志着可以进行新的数据收发了RDRF=1:标志着接收到了新数据实际应用:利用单片机每隔400ms向电脑发送一次“hitele”,每次接收到PC发送来的数据时,改变led状态。每隔400ms,利用前面讲过的定时器,回顾一下吧。串口发送编程:1.先对SCI初始化SCI0BDH=0x01;SCI0BDL=0x04;//将波特率设置为9600,注意这是在fBUS为40M的情况下设定的SCI0CR1=0x64;//设置串口接收端连接到外部;SCI0CR2=0x2C;//启用接收中断;发送使能和接收使能2.发送函数voidSci0SendByte(unsignedchardata){while(!(SCI0SR1&0X80));//等待TDRE为置1,也就是等待什么时候可以发送新数据SCI0DRL=data;//向数据寄存器写入要发送的数据,这样就发送出去了}3.接收函数查询式接收:哈工大嵌入式开发hitele.taobao.comunsignedcharSci0Read(){while(!SCI0SR1_RDRF);//一直等待接收数据,直到接收到SCI0SR1_RDRF=1;//读取数据寄存器会将RDRF清除重新置位returnSCI0DRL;//返回数据寄存器的数据}中断方式接收数据:#pragmaCODE_SEGNON_BANKEDvoidinterrupt20SCI0_RE(void){SCI0SR1_RDRF=1;SCI0DRL;//这两步是为了清除中断标志