这个程序是
单片机控制晶闸管整流,采集负载电流,同步信号,并显示相控角和负载电流。P1口控制字形,P2口控制字位,P0与P3连接ADC0809,剩下的端口发出脉冲信号。程序运行之后,只有0809运行,显示程序和中断都不工作。不知道哪里要改,求大神解答。
#include <reg52.h>
#include <intrins.h>
#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;
sbit si1=P3^4;
sbit si2=P3^6;
sbit eoc=P3^5;
sbit oe=P3^1;
sbit st=P3^0;
sbit clk=P3^3;
uint getdata=0;
#define _3ms_ 1866
延时程序
void delay(int t)
{
uchar i,j;
for(i=0;i<t;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);
}
}
一周热门 更多>