c8051单片机

来源:百度知道 编辑:UC知道 时间:2024/09/21 16:26:34
菜鸟我要编个程序用c8051f330单片机,用uart功能,一个发送一个接收,当收到01h则小灯亮,00h则小灯暗。 小弟我写得部分代码(有错),请大虾改下,添下代码!
$include (c8051f330.inc)

LED equ P1.3
ORG 0000H
AJMP MAIN
ORG 0100H

MAIN: MOV PCA0MD,#00H
ANL PCA0MD, #NOT(040h)
ORL P0SKIP, #04h
MOV SCON,#50h //选用方式0,8位UART;uart接受允许
MOV TMOD,#20h //启用定时器1 工作方式2
SETB SMOD //波特率加倍
SETB TR1 //开定时器1
SETB ES0 //uart0允许
(MOV SBUF0,#01H //sbuf0赋值 )
LOOP: JNB RI0,LOOP //判断是否有数据接收,无则继续判断
CLR RI0
Mov R7,@ SBUF0 //将所接收到的值赋给R7
CJNZ R7,#00H,LOOP1 //判断是否为0,是则灭灯,否则跳转
CLR LED
SJMP END
LOOP1: CJNZ R7,#01H,LOOP //判断是否为1,是则亮灯,否则跳转
SETB LED
END: END

LED equ P1.3
ORG 0000H
AJMP MAIN
ORG 0100H

MAIN: MOV PCA0MD,#00H
ANL PCA0MD, #NOT(040h)
ORL P0SKIP, #04h
MOV SCON,#50h //选用方式0,8位UART;uart接受允许
MOV TMOD,#20h //启用定时器1 工作方式2
SETB SMOD //波特率加倍
SETB TR1 //开定时器1
(SETB ES0 //uart0允许 );查询不用中断,这句可删掉,用中断的话见下面代码)
(MOV SBUF0,#01H //sbuf0赋值 )
LOOP: JNB RI0,LOOP //判断是否有数据接收,无则继续判断
CLR RI0
Mov R7,@ SBUF0 //将所接收到的值赋给R7
CJNZ R7,#00H,LOOP1 //判断是否为0,是则灭灯,否则跳转
CLR LED
SJMP END
LOOP1: CJNZ R7,#01H,LOOP //判断是否为1,是则亮灯,否则跳转
SETB LED
END: END

在前面添加ORG 0023H
AJMP ZDZ

........
SETB TR1 //开定时器1
$: AJMP $
ZD:CLR RI0
Mov R7,@ SBUF0 ;(不知道你用的片子这条指令怎么写,标准51中是:mov r7,sbuf)//将所接收到的值赋给R7
CJNZ R7,#00H,LOOP1 //判断是否为0,是则灭灯,否则跳转
CLR LED
SJMP END
LOOP1: CJNZ R7,#01H,LOOP //判断是否为1,是则亮灯,否则跳转
SETB LED
RETI

这是在8051接收串行数据并将接收数据传到P2口再通过串行发送出去的程序(中断方式),你可以借