历史上的今天

今天是:2024年09月01日(星期日)

正在发生

2020年09月01日 | PIC16F883单片机EUSART串口通信

发布者:haoying 来源: eefocus关键字:PIC16F883  单片机  EUSART  串口通信 手机看文章 扫描二维码
随时随地手机看文章

在两个单片机之间建立串口通信


说明:我们使用数码管显示接收到的数据,数据是对方的按键编号。


硬件连接图:

有一点至关重要,就是两个单片机要共地。发送和接收引脚在两个单片机上交叉相连。


这里采用的是异步发送和接收。


发送原理图:

EUSART接收图:

时序图:

 

实现代码流程图:

实现代码:


#include

 

 

 

    __CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

 

    __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V

 

 

 

udata_shr

 

counter res 1

 

counter1 res 1 ;扫描按键变量

 

counter2 res 1 ;延时程序微调参数

 

key_state res 1 ;按键状态

 

keynum res 1 ;按键标号

 

swap res 1 ;确认按键转换值

 

keypress res 1

 

keypressbak res 1

 

keyrelease res 1

 

LED1 res 1

 

LED2 res 1

 

LED3 res 1

 

LED4 res 1

 

 

 

    UDATA

 

counter3 res 1

 

counter4 res 1

 

sign res 1

 

 

 

 

 

reset code 0x0000

 

pagesel start

 

goto start

 

 

 

;int_vector code 0x0004

 

code

 

start

 

banksel ANSEL ;设置PORTA为数字模式

 

clrf ANSEL

 

banksel ANSELH ;设置PORTB为数字模式

 

clrf ANSELH

 

banksel TRISB ;设置PORTB为输入模式

 

movlw b'11111111'

 

movwf TRISB

 

banksel WPUB ;设置PORTB弱上拉

 

movlw b'11111111'

 

movwf WPUB

 

banksel OPTION_REG

 

movlw b'01000101' ;TMR0 64分频

 

movwf OPTION_REG

 

banksel T1CON

 

movlw b'10010001' ;打开TMR1,设置1:8预分频,内部时钟源1:4分频

 

movwf T1CON

 

banksel TRISA ;设置PORTA<3:0>为输出,接数码管的共阴极

 

movlw b'11100000'

 

movwf TRISA

 

banksel PORTA

 

clrf PORTA

 

banksel TRISC

 

movlw b'00000000' ;设置PORTC为输出,接8段数码管

 

movwf TRISC

 

clrf counter1

 

;***************************************

 

;串口发送配置

 

banksel TXSTA

 

movlw b'10100100'

 

movwf TXSTA

 

banksel BAUDCTL

 

movlw b'00000001'

 

movwf BAUDCTL

 

banksel SPBRG ;设置波特率

 

movlw d'25'

 

movwf SPBRG

 

banksel RCSTA

 

movlw b'10010000'

 

movwf RCSTA

 

 

 

;***************************************

 

loop

 

movlw HIGH Table1

 

movwf PCLATH

 

movf counter1,0

 

call Table1

 

banksel TRISB

 

movwf TRISB

 

movf counter1,0

 

call Table1

 

banksel PORTB

 

movwf PORTB

 

movf PORTB,0

 

movwf key_state

 

movlw b'11001000'

 

iorwf key_state,1

 

movf counter1,0

 

call Table1

 

 

 

xorwf key_state,0

 

movwf swap

 

comf swap,1

 

incfsz swap,1

 

goto case1

 

 

 

incf counter1,1

 

movf counter1,0

 

call Table1

 

banksel TRISB

 

movwf TRISB

 

movf counter1,0

 

call Table1

 

banksel PORTB

 

movwf PORTB

 

movf PORTB,0 ;读取I/O状态

 

movwf key_state

 

movlw b'11001000'

 

iorwf key_state,1

 

movf counter1,0

 

call Table1

 

xorwf key_state,0

 

movwf swap

 

comf swap,1

 

incfsz swap,1

 

goto case2

 

 

 

incf counter1,1

 

movf counter1,0

 

call Table1

 

banksel TRISB

 

movwf TRISB

 

movf counter1,0

 

call Table1

 

banksel PORTB

 

movwf PORTB

 

movf PORTB,0 ;读取I/O状态

 

movwf key_state

 

movlw b'11001000'

 

iorwf key_state,1

 

movf counter1,0

 

call Table1

 

xorwf key_state,0

 

movwf swap

 

comf swap,1

 

incfsz swap,1

 

goto case3

 

 

 

incf counter1,1

 

movf counter1,0

 

call Table1

 

banksel TRISB

 

movwf TRISB

 

movf counter1,0

 

call Table1

 

banksel PORTB

 

movwf PORTB

 

movf PORTB,0 ;读取I/O状态

 

movwf key_state

 

movlw b'11001000'

 

iorwf key_state,1

 

movf counter1,0

 

call Table1

 

xorwf key_state,0

 

movwf swap

 

comf swap,1

 

incfsz swap,1

 

goto case4

 

goto continue

 

 

 

case1

 

btfsc key_state,4

 

goto key2

 

movlw d'1'

 

movwf keynum

 

call DealKeyPress

 

goto continue

 

key2

 

btfsc key_state,2

 

goto key3

 

movlw d'2'

 

movwf keynum

 

call DealKeyPress

 

goto continue

 

key3

 

btfsc key_state,1

 

goto key4

 

movlw d'3'

 

movwf keynum

 

call DealKeyPress

 

goto continue

 

key4

 

btfsc key_state,0

 

goto continue

 

movlw d'4'

 

movwf keynum

 

call DealKeyPress

 

goto continue

 

 

 

 

 

 

 

 

 

case2

 

;-------------------------------------------------

 

;下面代码实现K10K8K5的按键处理

 

btfsc key_state,2

 

goto key8

 

movlw d'10'

 

movwf keynum

 

call DealKeyPress

 

goto continue

 

;------------------------------------

 

;处理K8

 

key8

 

btfsc key_state,1

 

goto key5

 

movlw d'8'

 

movwf keynum

 

call DealKeyPress

 

goto continue

 

;------------------------------------

 

;处理K5

 

key5

 

btfsc key_state,0

 

goto case3

 

movlw d'5'

 

movwf keynum

 

call DealKeyPress

 

goto continue

 

 

 

case3

 

;----------------------------------

 

;处理K6/K9

 

btfsc key_state,1

 

goto key6

 

movlw d'9'

 

movwf keynum

 

call DealKeyPress

 

goto continue

 

key6

 

btfsc key_state,0

 

goto case4

 

movlw d'6'

 

movwf keynum

 

call DealKeyPress

 

goto continue

 

case4

 

;-----------------------------------------

 

;处理K7

 

btfsc key_state,0

 

goto continue

 

movlw d'7'

 

movwf keynum

 

call DealKeyPress

 

 

 

continue

 

banksel PIR1

 

btfss PIR1,RCIF ;检测有无收到数据

 

goto lOOP2

 

call receive

 

lOOP2

 

call display

 

clrf counter1

 

goto loop

 

 

 

 

 

;-----------------------------------

 

;按键去抖,约8mS

 

delay

 

movlw d'4'

 

movwf counter2

 

LOOP2

 

banksel TMR0

 

clrf TMR0

 

LOOP1

 

banksel INTCON

 

btfss INTCON,T0IF

 

goto LOOP1

 

bcf INTCON,T0IF

 

decfsz counter2,1

 

goto LOOP2

 

return

 

 

 

delay2

 

incfsz counter3,1

 

goto delay2

 

return

 

 

 

;--------------------------------

 

;按键处理程序

 

;

 

DealKeyPress

 

clrf LED1

 

clrf LED2

 

clrf LED3

 

; clrf LED4

 

call delay

 

 

 

banksel TMR1H

 

clrf TMR1H

 

banksel TMR1L

 

clrf TMR1L

 

clrf keypress

 

presstime

 

banksel PIR1

 

btfss PIR1,TMR1IF

 

goto next

 

bcf PIR1,TMR1IF

 

incf keypress

 

movlw d'2'

 

subwf keypress,0

 

banksel STATUS

 

btfsc STATUS,C

 

goto longpress

 

next

 

movf counter1,0

 

call Table1

 

banksel TRISB

 

movwf TRISB

 

banksel PORTB

 

movwf PORTB

 

movf PORTB,0 ;读取I/O状态

 

movwf key_state

 

movlw b'11001000'

 

iorwf key_state,1

 

movf counter1,0

 

call Table1

 

xorwf key_state,0

 

movwf swap

 

comf swap,1

 

incfsz swap,1

 

goto presstime

 

 

call delay

 

 

 

banksel TMR1H

 

clrf TMR1H

 

banksel TMR1L

 

clrf TMR1L

 

clrf keyrelease

 

releasetime

 

banksel PIR1

 

btfss PIR1,TMR1IF

 

goto next1

 

bcf PIR1,TMR1IF

 

incf keyrelease

 

movlw d'1'

 

subwf keyrelease,0

 

banksel STATUS

 

btfsc STATUS,C

 

goto click

 

next1

 

movf counter1,0

 

call Table1

 

banksel TRISB

 

movwf TRISB

 

banksel PORTB

 

movwf PORTB

 

movf PORTB,0 ;读取I/O状态

 

movwf key_state

 

movlw b'11001000'

 

iorwf key_state,1

 

movf counter1,0

 

call Table1

 

xorwf key_state,0

 

movwf swap

 

comf swap,1

 

incfsz swap,1

 

goto over

 

goto releasetime

 

over

 

call delay

 

banksel TMR1H

 

clrf TMR1H

 

banksel TMR1L

 

clrf TMR1L

 

clrf keypress

 

presstime1

 

banksel PIR1

 

btfss PIR1,TMR1IF

 

goto next2

 

bcf PIR1,TMR1IF

 

incf keypress

 

movlw d'1'

 

subwf keypress,0

 

banksel STATUS

 

btfsc STATUS,C

 

goto click

 

next2

 

movf counter1,0

 

call Table1

 

banksel TRISB

 

movwf TRISB

 

banksel PORTB

 

movwf PORTB

 

movf PORTB,0 ;读取I/O状态

 

movwf key_state

 

movlw b'11001000'

 

iorwf key_state,1

 

movf counter1,0

 

call Table1

 

xorwf key_state,0

 

movwf swap

 

comf swap,1

 

incfsz swap,1

 

goto presstime1

 

movf keynum,0

 

movwf LED1

 

goto back

 

longpress ;长按计数清零

 

goto back

 

click

 

movf keynum,0

 

movwf LED1

 

back

 

;*********************************

 

;发送按键编号

 

 

banksel PIR1

 

lOOP

 

btfss PIR1,TXIF

 

goto lOOP

 

movf LED1,0

 

banksel TXREG

 

movwf TXREG

 

banksel TXSTA 

 

lOOP1

 

btfss TXSTA,TRMT

 

goto lOOP1

 

 

 

;*********************************

 

return

 

 

 

;--------------------------------

 

;显示数码管

 

;

 

display

 

banksel PORTA

 

movlw b'11111110'

 

movwf PORTA

 

movf LED1,0

 

call Table3

 

banksel PORTC

 

movwf PORTC

 

movwf counter

 

btfss counter,6

 

goto lOOP5

 

banksel PORTA

 

bsf PORTA,4

 

goto next4

 

lOOP5

 

banksel PORTA

 

bcf PORTA,4

 

next4

 

call delay2

 

 

 

banksel PORTA

 

movlw b'11110111'

 

movwf PORTA

 

movf LED4,0

 

call Table3

 

banksel PORTC

 

movwf PORTC

 

movwf counter

 

btfss counter,6

 

goto lOOP6

 

banksel PORTA

 

bsf PORTA,4

 

goto next5

 

lOOP6

 

banksel PORTA

 

bcf PORTA,4

 

next5

 

call delay2

 

return

 

 

 

receive

 

;*********************************

 

;接收按键编号

 

banksel RCREG

 

movf RCREG,0

 

movwf LED4

 

return

 

;*********************************

 

 

 

;----------------------

 

;Table真值表

 

;

 

Table1 ;PORTB、TRISB扫描配置信息

 

    ADDWF   PCL,f

 

    RETLW   B'11111111' 

 

    RETLW   B'11101111'

 

    RETLW   B'11111011'

 

    RETLW   B'11111101'

[1] [2]
关键字:PIC16F883  单片机  EUSART  串口通信 引用地址:PIC16F883单片机EUSART串口通信

上一篇:pic16多路adc采样
下一篇:pic16f1828 串口输出测试

推荐阅读

上线7天,完成1.5亿元融资,连续多天微信朋友圈刷屏,App Store排行榜第一名 ,这是子弹短信创下的业绩。  值得一提的是,由于下载量太大,子弹短信还曾被苹果误会有刷榜行为,触发了苹果软件商店的自动验证机制,为此罗永浩不得不在微博公开求介绍苹果中国区的人。  据悉,子弹短信由快如科技打造,罗永浩创办的锤子科技是其投资方,因为罗永浩一场...
根据美国国家公路交通安全管理局(NHTSA)调查显示,在 2017 年约有 37,000 人在美国公路上发生车祸而丧生,其中有 47% 的人没有系上安全带。有鉴于此,Honda 与安全气囊供应商 Autoliv 合作开发了新的前乘客座安全气囊,可以在不同角度发生的撞击中降低颈部与脑部受伤的机率,提升乘客安全。新安全气囊由三个部分组成:一个中央气囊和两个向外突...
据外媒报道,总部位于澳大利亚墨尔本的Rectifier Technologies公司推出了首款双向电动汽车充电器——壁挂式Highbury直流(DC)双向充电器,不仅可以利用家庭和企业的电力给电动汽车充电,还能够将电动汽车的剩余电力卖回给电网。图片来源:Rectifier此种称作“车到电网”(V2G)的技术可以让具有双向充电功能的电动汽车(如日产聆风)车主在用电高峰期时...
ISTOBAL中国首次在CIAACE展示其龙门式洗车机,旨在提高盈利能力并改善用户体验•适应中国市场的ISTOBAL M&#39;1 和 M&#39;START龙门式洗车机以其高水平的可靠性、灵活性、生产力和在 5 分钟内提供高效清洗能力而脱颖而出。•针对汽车经销商、加油站和洗美店,产品极具竞争力和可靠性,有能力每次洗涤回收高达 80% 的水。•将自身定位成技术合作伙伴...

史海拾趣

问答坊 | AI 解惑

基于LonWorks的在系统编程技术

摘要:LonWorks技术的应用使得在系统编程的内涵得以更充分的体现。本文在概要介绍ISP以及LonWorks技术的基础上,详细说明采用基于Neuron芯片的控制节点实现对CPLD进行在系统编程的具体方法。 关键词:Neuron 控制节点 在系统编程(ISP) CPLD 引 ...…

查看全部问答∨

各种针孔摄像头的安装方法

关键字:针孔摄像头         现在的针孔摄像头一般有以下几类:有线针孔摄像头,无线针孔摄像头,带夜视的和不带夜视的针孔摄像头,还有高解析度的看字针孔摄像头,和各种伪装的纽扣针孔摄像头,火机、领带、水杯、 ...…

查看全部问答∨

高质量编程(林锐)

经典的经典,哭着喊着要下载的好东东哦…

查看全部问答∨

wince下怎么删除文件碎片和查看磁盘空间

如题,希望大家帮帮。用c#实现,有源码最好了…

查看全部问答∨

一个开发板的样本驱动程序 用下面的编译参数直接编译,出现以下错误

[root@localhost turner]# arm-linux-gcc -D__KERNEL__ -I/opt/FriendlyARM/SBC2410/kernel/include -Wall -Wstrict-prototypes -Wno-trigraphs -Os -mapcs -fno-strict-aliasing -fno-common -fno-common -pipe -mapcs-32 -march=armv4 -mtu ...…

查看全部问答∨

一个很奇怪的问题,网络不通

还是dm9000的问题,在wince下把dm9000驱动加载了,奇怪的是我把镜像烧在memory时运行很好,但是烧在flash后就不通,也无法获取ip,其他功能都好的。有没有人遇到国这个情况。…

查看全部问答∨

关于811会锁死的问题

&nbsp;&nbsp; 在用户程序没有对JTAG加密的情况下,哪些因素会导致芯片锁死? 就是无法通过JTAG连接到芯片。…

查看全部问答∨

想熟悉430的各种中断,各位大虾有什么好介绍???

本人对于430的中断基本没有什么了解。。。…

查看全部问答∨

AM335X运行Windows Embedded Compact (WEC) 7.0 BSP

系统说明Windows 7  32bit读卡器SanDisk    Class 4  8G  tf 卡1.AM335X 资源指南3.版本7.04.注册及登陆5.注册Email收到ftp登陆名及密码Thanks for your interest in Adeneo Embedded reference board sup ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved