在两个单片机之间建立串口通信。
说明:我们使用数码管显示接收到的数据,数据是对方的按键编号。
硬件连接图:
有一点至关重要,就是两个单片机要共地。发送和接收引脚在两个单片机上交叉相连。
这里采用的是异步发送和接收。
发送原理图:
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'
上一篇:pic16多路adc采样
下一篇:pic16f1828 串口输出测试
推荐阅读
史海拾趣
随着生产设备的引进和技术团队的壮大,GSME Electronics开始专注于半导体器件的研发与生产。公司产品线逐渐丰富,涵盖了片式各种系列表面贴装的小信号三极管、中功率驱动三极管、肖特基、开关二极管及小功率可控硅等多种半导体分立器件。这些产品广泛应用于移动通信、计算机、消费类电子信息产品、家用电器、工业自动化控制设备等领域,满足了市场的多样化需求,推动了公司业务的快速增长。
作为一家有社会责任感的企业,义隆电子一直关注可持续发展问题。公司积极推广绿色生产理念,采取环保措施减少生产过程中的污染排放。同时,义隆电子还关注社会公益事业,积极参与各种慈善活动,回馈社会。这些举措不仅提升了公司的品牌形象,也为公司的长期发展奠定了坚实基础。
请注意,以上故事框架仅供参考,具体的故事内容需要根据义隆电子的实际情况进行撰写。
在产品多元化的基础上,义隆电子开始积极拓展国际市场。公司以台湾新竹科学园区为营运总部,在亚洲、美洲等多个国家和地区设立了分支机构和设计中心。通过与全球合作伙伴的紧密合作,义隆电子的产品逐渐进入欧洲、亚洲和美洲等市场,实现了全球布局。
随着公司的发展壮大,艾谱科开始关注社会责任。公司积极参与环保事业,采用环保材料和绿色生产工艺,减少对环境的影响。此外,艾谱科还积极参与公益慈善活动,为社会做出了积极贡献。这种积极履行社会责任的行为,进一步提升了公司的社会形象和声誉。
摘要:LonWorks技术的应用使得在系统编程的内涵得以更充分的体现。本文在概要介绍ISP以及LonWorks技术的基础上,详细说明采用基于Neuron芯片的控制节点实现对CPLD进行在系统编程的具体方法。 关键词:Neuron 控制节点 在系统编程(ISP) CPLD 引 ...… 查看全部问答∨ |
关键字:针孔摄像头 现在的针孔摄像头一般有以下几类:有线针孔摄像头,无线针孔摄像头,带夜视的和不带夜视的针孔摄像头,还有高解析度的看字针孔摄像头,和各种伪装的纽扣针孔摄像头,火机、领带、水杯、 ...… 查看全部问答∨ |
一个开发板的样本驱动程序 用下面的编译参数直接编译,出现以下错误 [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,其他功能都好的。有没有人遇到国这个情况。… 查看全部问答∨ |
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 ...… 查看全部问答∨ |