|
提供汇编和c语言2个版本的程序 电路图在最下面
ORG 0000h
LJMP MAIN
;====================;
ORG 0003h
SETB P3.0 ;OE=1
MOV R3,P2 ;READ ADC
CLR P3.0 ;END
RETI
;=====================;
ORG 000Bh
CPL P3.4 ;CREAT CLK
RETI
;===================;
ORG 001Bh
CLR TR1 ;close T1
CLR P3.1 ;ALE=0
CLR P3.3 ;start=0
nop
nop
SETB P3.1 ;ALE=1
SETB P3.3 ;start=1
nop
nop
CLR P3.1 ;ALE=0
CLR P3.3 ;start=0
MOV TH1,#3DH
MOV TL1,#0B0H
SETB TR1 ;open T1
RETI
;==================;
ORG 0040H
MAIN: CLR P3.0
CLR P3.1
CLR P3.3
SETB EA
SETB EX0
SETB IT0
SETB PX0
SETB ET0
SETB ET1
SETB PT1
MOV TMOD,#12H
MOV TH0,#0FDH
MOV TL0,#0FDH
MOV TH1,#3DH
MOV TL1,#0B0H
SETB TR0
SETB TR1
LOOP: MOV P1,R3
SJMP LOOP
end
#include"reg52.h"
#include"intrins.h"
unsigned int tt,dd;
sbit clock=P3^0;
sbit start=P3^1;
sbit OE=P3^3;
sbit ALE=P3^4;
sbit addA=P3^5;
sbit rs=P3^6;
sbit e=P3^7;
void delay(unsigned char us)
{
while(us--);
}
void w1602(bit w,unsigned char dat)
{
rs=w;
e=0;
P1=dat;
delay(4);
e=1;
delay(8);
e=0;
}
void init1602()
{
w1602(0,0x38);
w1602(0,0x06);
w1602(0,0x0c);
w1602(0,0x01);
}
void main()
{
init1602();
start=0;
OE=0;
ALE=0;
EA=1;
EX0=1;
IT0=1;
PX0=1;
ET0=1;
ET1=1;
PT1=1;
TMOD=0x12;
TH0=0xf0;
TL0=0xf0;
TH1=0x4d;
TL1=0xb0;
TR0=1;
TR1=1;
while(1)
{
dd=tt*196/100;
w1602(0,0x80);
w1602(1,0x30+dd/100);
w1602(1,0x2e);
w1602(1,0x30+(dd%100)/10);
w1602(1,0x30+(dd%100)%10);
}
}
void ddd() interrupt 0
{
OE=1; //EOC _______________|---|___
tt=P0; //OE _______________|---|___read dat to tt
OE=0;
}
void clockt() interrupt 1
{
clock=~clock; //creat clk pulse for ADC0808
}
void wdata() interrupt 3
{
TR1=0; //close C/T1
ALE=0;
start=0;
_nop_();
ALE=1;
start=1;
_nop_();
start=0; // ALE ___|---|___________________
ALE=0; //start ___|---|___________________
_nop_(); //finsh EOC _____________________|---|___
TH1=0x4d;
TL1=0xb0;
TR1=1; //reset C/T1 for Next ADC
}
|
|