完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
目前遇到一个问题,我的大程序不加串口是可以ad采集并液晶显示的,现在把串口部分加到大程序里,发现无法把ad采集的数据发送给串口。我的串口程序是可以的,在大程序里while(1)里,单独测试过,如单独发send(3)是收到3的,如果发送Send(date_tab[0]);就不行,串口助手没有任何数据,哪个大佬答疑解惑,非常感谢!
下面附上adc.c、uart.c和main.c程序,求大佬指导一二。 #include #include #include #include "delay.h" #include "lcd.h" #include "adc.h" #include "key.h" #include "display.h" #include "uart.h" uchar data date_tab[8]; uint flag=0;//按键标志位 uint TestDisMode=0; uint PresValue=0; void main() { uart_init();//串口初始化 TH0=(65536-1000)/256; //1ms初值 TL0=(65536-1000)%256; ET0=1; //TR0=1;//初始化时关闭T0,等按下开始再启动T0 TR0=0;//初始化T0停止 EA=1;//开总中断 lcd_init(); display_start(); delay_ms(10); while(1) { keyscan(); if(TestDisMode==1) { TR0=1;//按下开始键后T0开启 Volt_pressure_display(); if(enable=1)//如果上位机按下开始采集,则发送0x01给下位机 { Send(date_tab[4]);//发送压力千位 Send(date_tab[5]);//发送压力百位 Send(date_tab[6]);//发送压力十位 Send(date_tab[7]);//发送压力个位 } if(enable==0)//如果没有收到01,则关闭ad采集,不发送数据 { TR0=0; } } else { TR0=0; } } } void timer0() interrupt 1 { uchar t0;//t0控制pwm信号时间变量 uchar t1;//t1控制采样频率时间变量 TH0=(65536-1000)/256; //1ms初值 TL0=(65536-1000)%256; t0++; t1++; if(t1==100) //采样频率是100ms { t1=0; Volt_collect(); } } #include #include #include #include "uart.h" /*************串口初始化函数*******************************/ void uart_init(void) { TMOD=0x21; //定计0工作方式1,定计1工作方式2 TH1=0XFD; //定计1赋初值 TL1=0XFD; SCON=0X50; //串口控制寄存器:SM0=0,SM1=1,REN=1 TR1=1; //开定计器1 EA=1; //开总中断 ES=1; //开串口中断 } /*************串口中断服务子程序*******************************/ void uart_Interrupt() interrupt 4 { if(RI==1) { RI=0; if(SBUF == 0x01)//下位机收到01,则开始采集 { enable = 1; } if(SBUF == 0x02)//下位机收到02,则停止采集 { enable = 0; } } } /*************************串口字符发送函数********************************/ void Send(uint dat) { SBUF=(dat)+ 48; // 发送 千 位 while(!TI); TI=0; } #include #include #include #include "adc.h" #include "display.h" uint recieve_volt; extern uchar data date_tab[8]; extern uint PresValue; /*******************************************************************/ /* */ /* 启动AD转换子程序 */ /*******************************************************************/ void start_ad(void) { cs=0; //允许进行A/D转换 wr=0;_nop_();wr=1; //WR由低变高时,AD开始转换 //while(intr); //查询转换结束产生INTR 信号(低电平有效) cs=1; //停止AD转换 } /*******************************************************************/ /* */ /* 读A/D数据子程序 */ /*******************************************************************/ unsigned int read_ad() { uint ad_data; ad0_7=0xff; cs=0; //允许读 rd=0; //读取转换数据结果数据结果 _nop_(); ad_data=ad0_7; //把数据存到ad_data中 rd=1;cs=1; //停止A/D读取 return(ad_data); } /*******************************************************************/ /* */ /*电压采集子程序 */ /*******************************************************************/ void Volt_collect() { start_ad(); recieve_volt=read_ad(); recieve_volt=recieve_volt*196; date_tab[0] =recieve_volt/10000; //整数 date_tab[1]=recieve_volt%10000/1000; // 十分位 date_tab[2]=recieve_volt%1000/100; // 百分位 date_tab[3]=recieve_volt%100/10; //千分位 } |
|
相关推荐
7个回答
|
|
附上uart.h
#ifndef _UART__H #define _UART__H #define uint unsigned int #define uchar unsigned char void uart_init();//´®¿Ú³õʼ»¯º¯Êý void uart_Interrupt();//´®¿ÚÖжϺ¯Êý void Send(uint dat);//´®¿Ú×Ö·û·¢Ëͺ¯Êý extern uint enable;//´®¿Ú¿ª¹Ø¿ØÖÆ룬1Ϊ´ò¿ª #endif 附上adc.h #ifndef _ADC__H #define _ADC__H #include #include #define uint unsigned int #define uchar unsigned char #define ad0_7 P1 //ADÊý¾Ý¿Ú void start_ad(void); unsigned int read_ad(); #endif |
|
|
|
上电后,串口助手一直收到hhhhhhh
|
|
|
|
你用的哪款液晶屏,我这里推荐一款I2C接口的 RSCG12864B01, 支持12*12和16*16的中文字库,支持图片存储功能(用于开机画面及菜单使用)
|
|
|
|
先解决上电串口助手就收到数据的问题,按你的程序结构,应该是有对应的按键按下,并且上位机发采集命令,单片机才会采集并返回数据。
void Send(uint dat) { SBUF=(dat)+ 48; 这里不太明白,或许去掉dat的括号试试。 另外按你说的单独发send(3)是收到3的,好像也不对,SBUF=(dat)+ 48; 所以发送3,应该收到3+48=51才对 |
|
|
|
人中狼 发表于 2018-3-7 11:52 恩,是的,我是按下开始键,下位机开始采集数据并显示,此时如果上位机发采集命令,则开始通过串口发数据。send函数应该是对的吧,我测试程序试过。 |
|
|
|
人中狼 发表于 2018-3-7 11:52 +48是刚好发字符3,对应ascii码是51 |
|
|
|
程序思路是按下下位机开始键,下位机开始采集数据并显示,然后如果此时上位机发来采集命令,则开始向串口发数据,send函数应该没问题吧,我测试程序也这么写的 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11765 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 07:32 , Processed in 0.743874 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号