完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这个程序是单片机控制晶闸管整流,采集负载电流,同步信号,并显示相控角和负载电流。P1口控制字形,P2口控制字位,P0与P3连接ADC0809,剩下的端口发出脉冲信号。程序运行之后,只有0809运行,显示程序和中断都不工作。不知道哪里要改,求大神解答。
#include #include #define uchar unsigned char #define uint unsigned int code uchar code seg7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar wei[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; uint q,w,e; ***it si1=P3^4; ***it si2=P3^6; ***it eoc=P3^5; ***it oe=P3^1; ***it st=P3^0; ***it clk=P3^3; uint getdata=0; #define _3ms_ 1866 延时程序 void delay(int t) { uchar i,j; for(i=0;i for(j=13;j>0;j--); { } } } 显示程序 void display(uchar d) { uint x,c,v; x=d/100; c=d%100/10; v=d%10; P2=0xff; P1=seg7[x]; P2=wei[0]; delay(200); P2=0xff; P1=seg7[c]; P2=wei[1]; delay(200); P2=0xff; P1=seg7[v]; P2=wei[2]; delay(200); P2=0xff; P1=0xc0; P2=wei[3]; delay(200); P2=0xff; P1=0x92; P2=wei[4]; delay(200); P2=0xff; P1=0xff; P2=wei[5]; delay(200); } ADC0809转换 void adc0809() { float temp=0.0; st=0; st=1; st=0; while(eoc==0) { oe=1; getdata=P0; oe=0; } } 定时器0给0809时钟 void timer0() interrupt 1 { TH0=(65536-2)/256; TL0=(65536-2)%256; clk=!clk; } 定时器1控制相控角 void timer1() interrupt 3 { q=0; w=5; e=0xff; TR1=0; TL1=(65536-_3ms_)/256; TH1=(65536-_3ms_)%256; TR1=1; } 外部中断0接受同步信号,并发出触发脉冲 void mac() interrupt 0 { uint i=0,j=0; si1=1; for(i=0;i<100;i++) {_nop_(); _nop_(); _nop_();} si1=0; j++; if(j>=4) { si2=1; for(i=0;i<100;i++) {_nop_(); _nop_(); _nop_();} si2=0; j=0; } } void main() { clk=0; st=1; TMOD|=0x01; IT0=1; EX0=1; ET0=1; TH0=(65536-2)/256; TL0=(65536-2)%256; TMOD&=0xf0; TL1=(65536-_3ms_)/256; TH1=(65536-_3ms_)%256; IT1=1; EX1=1; ET1=1; EA=1; si1=1; si2=1; while(1) { adc0809(); display(getdata); } } |
|
相关推荐
8个回答
|
|
除了楼上指出的问题外,你的定时器初始化也有问题,TL1=(65536-_3ms_)/256;TH1=(65536-_3ms_)%256;高低位设置颠倒。特别是T1,你把TR1=1;放在定时器1中断里,不可能有此中断产生。***it eoc=P3^5;也有疑问,P3.5是T1计数器外部输入端。
最佳答案
|
|
|
|
while(eoc==0)这里查查eoc的状态吧,如果eoc不为高电平,那就退不出来了
|
|
|
|
楼上正解,建议显示程序改为定时器定时显示,不然很容卡死,特别遇到等待语句,卡死了。
|
|
|
|
说来谁去还是程序架构的问题。
|
|
|
|
|
|
|
|
wulinwl 发表于 2018-1-8 14:23 谢谢指出,其他都改过来了,但是我把TR=1发在main函数里后,定时器1中断还是触发不了,这可能是什么原因? |
|
|
|
你原来的定时器初始化设置本身就是错的,如果没有处理好,只改TR=1的位置有什么用? |
|
|
|
不错,感谢分享经验,学习下
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
690 浏览 0 评论
735 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
624 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1099 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1092 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11794 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 09:56 , Processed in 0.855302 second(s), Total 89, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号