如何实现I/O口模拟串口(标准51单片机)? 点击:1054 | 回复:0



sky643239

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 3回
  • 年度积分:0
  • 历史总积分:21
  • 注册:2008年4月07日
发表于:2008-04-07 14:26:34
楼主
软件模拟串口,使用普通I/O 口和T0

;标准51 单片机,22.1184MHz 晶体

;19200bps N81 收发

;北京迪文科技有限公司 www.dwin.com.cn 86-10-62102630 62105007

;接收触摸屏信息 AA 73 XH XL YH YL

UTXD BIT P1.7 ;OUT USER RS232 INTERFACE

RXD BIT P1.5 ;IN

COMFLG EQU 20H ;.7 RECEIVED A VALID RF FRAME DATA

TCHOK BIT COMFLG.7

SYNCOK BIT COMFLG.6

RXAA EQU 30H ;触摸屏接收缓冲区

RX73 EQU 31H

RXXH EQU 32H

RXXL EQU 33H

RXYH EQU 34H

RXYL EQU 35H

RXLEN EQU 40H

RXBUF EQU 41H ;软件串口接收缓冲寄存器

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP UART1PRO ;软件串口接收

ORG 0100H

MAIN: CLR EA

MOV SP,#80H

LCALL INITUART

SETB EA

START: NOP

JNB TCHOK,START

CLR TCHOK ;每点击一次触摸屏就把DMT48270 屏幕一个区域反色一次

MOV DPTR,#TESTLCD

LCALL ROMSND1

MOV R7,#30 ;发送LCD 显示帧间延时 3mS

LCALL DELAY

LJMP START

;*******软件串口驱动********

;软件串口初始化,T0 工作在Autoload 模式

INITUART:MOV TMOD,#22H

MOV TH0,#238 ;10uS 定时器中断,软件串口波特率为19200

MOV TL0,#238

CLR TF0

CLR SYNCOK

SETB TR0

SETB ET0

CLR TCHOK

RET

;T0 中断,软件模拟串口接收

UART1PRO:PUSH ACC

PUSH PSW

CLR TF0

JB SYNCOK,URXDPR1

JB URXD,URXDPRE

SETB SYNCOK

MOV TH0,#160

MOV TL0,#112

MOV RXLEN,#8

SJMP URXDPRE

URXDPR1:MOV C,URXD

MOV A,RXBUF

RRC A

MOV RXBUF,A

DJNZ RXLEN,URXDPRE

MOV TH0,#238 ;接收完成一个完整的字节

MOV TL0,#160

CLR SYNCOK

JB TCHOK,URXDPRE ;还有触摸屏数据没有处理就不接收新的数据

MOV RXAA,RX73

MOV RX73,RXXH

MOV RXXH,RXXL

MOV RXXL,RXYH

MOV RXYH,RXYL

MOV RXYL,RXBUF

MOV A,RXAA

CJNE A,#0AAH,URXDPRE

MOV A,RX73

CJNE A,#73H,URXDPRE

SETB TCHOK ;接收到触摸屏数据

URXDPRE:POP PSW

POP ACC

RETI

;软件模拟串口发送1 个字节数据,发送数据在ACC,采用延时方式

TXBCOM1:PUSH PSW

PUSH B

MOV B,R2

PUSH B

CLR UTXD ;起始位

MOV R2,#46

DJNZ R2,$

MOV B,#8 ;8 个数据位,LSB

TXBCOM11:RRC A

MOV UTXD,C

MOV R2,#46

DJNZ R2,$

DJNZ B,TXBCOM11

SETB UTXD ;停止位

MOV R2,#64

DJNZ R2,$

POP B

MOV R2,B

POP B

POP PSW

RET

;发送固定的字符串到软件串口,0xFF 为结束标记

ROMSND1: CLR A

MOVC A,@A+DPTR

INC DPTR

CJNE A,#0FFH,ROMSND1E

RET

ROMSND1E:LCALL TXBCOM1

LJMP ROMSND1

RET

DEALY: PUSH ACC

PUSH PSW

DELAY1: MOV A,#90

DJNZ ACC,$

DJNZ R7,DELAY1

POP PSW

POP ACC

RET

TESTLCD:DB 0AAH,5CH,00H,40H,00H,40H,00H,80H,00H,80H,0FFH ;反色区域(40,40) (80,80)

END


热门招聘
相关主题

官方公众号

智造工程师