ADC0808单片机的程序求教

ADC0808单片机的程序求教,第1张

汇编:

ORG 0000h

LJMP MAIN

====================

ORG 0003h

SETB P3.0OE=1

MOV R3,P2READ 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.1ALE=1

SETB P3.3start=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

c语言:

#include"reg52.h"源旦孝迟答

#include"intrins.h"

unsigned int tt,dd

sbit clock=P3^0

sbit start=P3^1

sbitOE=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

}

ORG 0000H

LOOP: CLR P2.2

SETB P2.2

JNB P2.1,$ 检测转换是否结束

CLR P2.0

MOV A,P0 读和高取转换结果

SETB P2.0

CLR C

SUBB A ,#2CH 数值调整,此值是针对本任务,非通用,由表6-2得

MOV DPTR,#TEMPTAB 查表获得温度

MOVC A,@A+DPTR

SETB P3.1

SETB P3.2

MOV B,#10 将温度值转换为BCD码

DIV AB 温度十位BCD码在A中,温度个位BCD码在B中

MOV R3,A温度十位BCD码暂存R3中

MOV R4,B 温度个吵卖位BCD码暂存R4中

MOV DPTR,#DIGITTAB 七段数码表首地址送DPTR

MOV A,R3

MOVC A,@A+DPTR 查表取得温度十位数的七段码

MOV P1,A温度十位数送P1口

CLR P3.2开十位显唤碰尺示

ACALL DELAY

MOV A,R4

MOVC A,@A+DPTR 查表取得温度个位数的七段码

SETB P3.2 关闭十位显示

MOV P1,A温度个位数送P1口

CLR P3.1开个位显示

ACALL DELAY

AJMP LOOP

DELAY: MOV R6,#2

D1: MOV R7,#250

D2: NOP

NOP

DJNZ R7,D2

DJNZ R6,D1

RET

DIGITTAB:数字0~9的共阳七段显示码

DB 0C0H 0

DB 0F9H 1

DB 0A4H 2

DB 0B0H 3

DB 099H 4

DB 092H 5

DB 082H 6

DB 0F8H 7

DB 080H 8

DB 090H 9

DB 08EH F 错误显示

TEMPTAB: 温度数据表

DB 90,89,88,87,100,86,85,84,83,100,82,81,100,80

DB 79,100,78,77,100,76,75,100,74,100,73,100,72,71

DB 100,70,100,69,100,68,100,67,100,66,100,65,100,64

DB 100,63,100,62,100,61,100,60,100,100,59,100,58,100

DB 57,100,100,56,100,55,100,54,100,100,53,100,52,100

DB 100,51,100,50,100,100,49,100,48,100,100,47,100,46

DB 100,100,45,100,100,44,100,43,100,100,42,100,100,41

DB 100,40,100,100,39,100,38,100,100,37,100,100,36,100

DB 35,100,100,34,100,100,33,100,32,100,100,31,100,30

DB 100,100,29,100,28,100,100,27,100,26,100,100,25,100

DB 24,100,100,23,100,22,100,21,100,20,100,100,19,100

DB 18,100,17,100,16,100,15,100,14,100,13,100,12,100

DB 11,100,10,9, 100,8, 100,7, 6, 100,5, 4, 100,3

DB 2, 1, 100,0

END


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12397579.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存