uart通信中,always @(posedge clk) begin rxbuf <= rxd0; rxfall <= rxbuf & (~rxd0); end

uart通信中,always @(posedge clk) begin rxbuf <= rxd0; rxfall <= rxbuf & (~rxd0); end,第1张

是的,不过你应该注意下,rxbuf需要初始化一下,rxd0是串口接收引脚,没有数据时一直保持为高电平,随着clk上升沿到来会将数据给rxbuf。当有数据到来时,rxd0会被拉低,而此时rxbuf任然是高电平,所以rxfall <= rxbuf & (~rxd0)这句话会给rxfall赋值1,故检测到了下降沿。
我觉得程序写的不好,rxbuf没有初始化。

这三种通信模式都是串行总线
SPI总线
MOTOROLA公司的SPI总线的基本信号线为3根传输线,即SI、SO、SCK。传输的速率由时钟信号SCK决定,SI为数据输入、SO为数据输出。采用SPI总线的系统如图8-27所示,它包含了一个主片和多个从片,主片通过发出片选信号-CS来控制对哪个从片进行通信,当某个从片的-CS信号有效时,能通过SI接收指令、数据,并通过SO发回数据。而未被选中的从片的SO端处于高阻状态。主设备通过产生移位时钟来发起通讯。通讯时,数据由SO
输出,SI
输入,数据在时钟的上升或下降沿由SO
输出,在紧接着的下降或上升沿由SI
读入,这样经过8/16
次时钟的改变,完成8/16
位数据的传输。
I2C总线
I2C(Inter-Integrated
Circuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C串行总线有两根信号线:一根双向的数据线SDA;另一根是时钟线SCL。所有接到I2C总线上的设备的串行数据都接到总线的SDA线,各设备的时钟线SCL接到总线的SCL。
I2C总线按字节传输,即每次传输8bits二进制数据,传输完毕后等待接收端的应答信号ACK,收到应答信号后再传输下一字节。等不到ACK信号后,传输终止。空闲情况下,SCL和SDA都处于高电平状态。
UART通信
UART:Universal
Asynchronous
Receiver/Transmitter,通用异步接收/发送装置。UART首先将并行数据转换成串行数据来传输。消息帧从一个低位起始位开始,后面是5~8个数据位,一个可用的奇偶位和一个或几个高位停止位。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来与PC进行通信。

这是我很久前做过的一个测试程序,你看看是否有帮助对你,,,,
;测试TTL转换232与计算机串行口通讯的程序,
;当接收到'A'时返回计算机'AB',同时LED状态翻转一次
;当接收到其他字符时LED闪亮两次
;使用晶震为110592MHz,定时器T1工作在模式2
;定时参数为F4,SMOD=0
ORG 0000H
RESET: LJMP MAIN
ORG 0023H ;RI + TI com int
LJMP SERVEINT
ORG 0100H
MAIN: MOV IE,#00000000H ;EA,,,ES,ET1,EX1,ET0,EX0
MOV SP,#60H
LCALL SET_T0_T1
setb p01
lcall delay_1s
clr p01
lcall delay_1s
setb p01
hereere: ljmp hereere
SERVEINT: CLR EA
CLR ES
CLR RI
MOV A,SBUF
CJNE A,#41h,RETULED
MOV SBUF,A
WAIT_1: JNB TI,WAIT_1
CLR TI
MOV A,#42h
MOV SBUF,A
WAIT_2: JNB TI,WAIT_2
CLR TI
CPL P01
ljmp eennd
retuled: setb p01
lcall delay_1s
clr p01
lcall delay_1s
setb p01
lcall delay_1s
clr p01
lcall delay_1s
setb p01
eennd: SETB EA
SETB ES
RETI
SET_T0_T1: MOV TCON,#00000000B ;TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0
;MOV TH1,#0f4H;2400bps
;MOV TL1,#0f4H
MOV TH1,#0FDH;9600bps
MOV TL1,#0FDH
MOV IP,#10H
MOV TMOD,#00100001B ;T1:GATE,C//T,M1,M0 T0:GATE,C//T,M1,M0
MOV SCON,#50H ;0101 0000B SM0 SM1 SM2 REN TB8 RB8 TI RI
MOV PCON,#00H ;SMOD=0
SETB TR1 ;SETB TR1,"SETB STR0",TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
SETB EA
SETB ES ;EA,,,ES,ET1,EX1,ET0,EX0
;MOV IE,#90H ;1001 0010B SETB EA,SETB ES,"SETB ET0"
RET

DELAY_1S: PUSH B
MOV B,#0AH
REST_T0: CLR TR0
MOV TH0,#3CH
MOV TL0,#0AFH
SETB TR0
LOOOP_T0: JBC TF0,NEXT_1S
LJMP LOOOP_T0
NEXT_1S: DJNZ B,REST_T0
CLR TR0
POP B
RET
END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13368065.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-23
下一篇 2023-07-23

发表评论

登录后才能评论

评论列表(0条)

保存