|
发表于 2020-3-17 12:31:06
|
显示全部楼层
从没用过C语言,不懂什么叫头文件。 如果是汇编,那估计你说的头文件就是寄存器定义。
下面贴上我自己编的,可参考下。
----------------------------------------------------------------------------------------------------
;下面是寄存器的分配使用
;字节20H的前4位用作18b20的存在标示位 。位00H,01H,02H,03H
;字节20H的后4位用作正负温度标志 位04H,05H,06H,07H
TPH1 EQU 24H ;存放温度值的高字节
TPL1 EQU 25H ;存放温度值的低字节
TTH1 EQU 26H ;合并成完整的温度整数\
TTL1 EQU 27H ;合并成完整的温度整数
DQ1 BIT P1.5 ;第一个DS18B20的数据口位
DQ2 BIT P1.4 ;第二个DS18B20的数据口位
LCDSX1 BIT 0FH ;字节21H的第1位做调试显示标志
TSRAM0 EQU 2CH ;定时器计数用的寄存器0
TSRAM1 EQU 2DH ;定时器计数用的寄存器1
TSRAM2 EQU 2EH ;定时器计数用的寄存器1
TSRAM3 EQU 2FH ;定时器计数用的寄存器1
TSRAM4 EQU 30H ;定时器计数用的寄存器1
YSRAM1 EQU 31H ;延时用寄存器1
YSRAM2 EQU 32H ;延时用寄存器2
YSRAM3 EQU 33H ; 延时用寄存器3
S1X EQU 34H ;第一行显示个位
S10X EQU 35H ;第一行显示十位
S100X EQU 36H ;第一行显示百位
S1000X EQU 37H ;第一行显示千位
S1XB EQU 38H ;第二行显示个位
S10XB EQU 39H ;第二行显示十位
S100XB EQU 3AH ;第二行显示百位
S1000XB EQU 3BH ;第二行显示千位
SS1 EQU 3CH ;时钟1秒计数
SS10 EQU 3DH ;时钟10秒计数
MM1 EQU 3EH ;时钟分个位
MM10 EQU 3FH ;时钟分十位
HH1 EQU 40H ;时钟小时个位
HH10 EQU 41H ;时钟小时十位
RR1 EQU 42H ;日 个位
RR10 EQU 43H ;日十位
YY1 EQU 44H ; 月个位
YY10 EQU 45H ;月十位
NN1 EQU 46H ;年个位
NN10 EQU 47H ;年十位
NN100 EQU 48H ;年百位
NN1K EQU 49H ;年千位
RY1 EQU 4EH ;每月日数计算最高限制
SBUF_R EQU 4AH ;串口接收字节计数
RAM1602 EQU 4BH ;LCD1602写入缓冲
ASWRAM1 EQU 4CH ;按键A 计数
BSWRAM1 EQU 4DH ;按键B 计数
RAM1602B EQU 4EH ;LCD1602 光标移动计数1
RAM1602C EQU 4FH ;LCD1602 光标移动计数2
RAM1602X EQU 50H ;LCD1602 光标闪烁
RS BIT P5.5 ;LCD1602 的 RS端 ,1-数据,0-指令
RW BIT P5.6 ;LCD1602 的 RW端 ,1-读出,0-写入
EN BIT P5.4 ;LCD1602 的 E端 ,先从低变高,再变低,以确认输入数据或命令
LCD1_1 EQU 80H ;LCD1602的第一行第1个
LCD2_1 EQU 90H ;LCD1602的第二行第1个
ORG 0000H
LJMP AA1
;--------------------------
ORG 00BH;T0中断入口
LJMP T0INT
ORG 0100H
;数值初始化
AA1:MOV R0,#02H ;间接寻址,从02H开始到0FFH共256字节 全清空置零
MOV R1,#255
CL1:MOV @R0,#00H
INC R0
DJNZ R1,CL1
MOV R0,#00
MOV R1,#00
SETB DQ1
CLR LCDSX1 ;清显示调试标注
MOV SP,#0E0H;设定堆栈底在RAM的0E0H
MOV NN1K,#2 ;给年数置2001年
MOV NN100,#0
MOV NN10,#2
MOV NN1,#0
MOV YY10,#0 ;给月数置 1月
MOV YY1,#1
MOV RR10,#0 ;给日数置 1日
MOV RR1,#1
;---------定时器T0初始化--------10毫秒@11.0592MHz
ANL AUXR,#7FH ;定时器T0时钟12T模式
ANL TMOD,#0F0H ;设置定时器模式
MOV TL0,#001H ;设置定时初值 #001H
MOV TH0,#0DCH ;设置定时初值 #0DCH
CLR TF0 ;清除TF0标志
SETB TR0 ;定时器0开始计时
SETB ET0 ;允许T0中断
;-------------------------
;------定时器T2初始化-------用于串口波特率
;晶振-11.0592MHZ
;波特率数对应T2重装值
;9600----0FEE0H
;4800----0FDC0H
;2400----0FB80H
;1200----0F700H
MOV T2L,#0E0H ;波特率9600
MOV T2H,#0FEH
MOV AUXR,#15H ;定时器T2工作1T模式,并开始计时 ; 选择定时器2作串口波特率
;-------------------------
MOV A,AUXR1
MOV AUXR1,A
SETB SM0
SETB SM1 ;串口工作在模式3,9位 ,波特率可变
SETB REN ;*****允许串口接收********
CLR ES ;暂停串口中断
SETB EA ;中断总开关
;---------------------------------------
;LCD1602初始化
MOV RAM1602,#000 ;清P2
LCALL DELAY15MS ;延时15毫秒
MOV RAM1602,#38H ;16行*2,5*8
LCALL ZL
LCALL DELAY5MS ;延时5毫秒
MOV RAM1602,#38H ;16行*2,5*8
LCALL ZL
LCALL DELAY5MS ;延时5毫秒
MOV RAM1602,#08H ;关显示
LCALL ZL
LCALL DELAY1MS ;延时1毫秒
MOV RAM1602,#01H ;清屏
LCALL ZL
LCALL DELAY5MS ;延时5毫秒
MOV RAM1602,#06H ;地址计数器AC自动加1,光标不移动*******
LCALL ZL ;
LCALL DELAY1MS ;延时1毫秒
MOV RAM1602,#0CH ;开显示
LCALL ZL
LCALL DELAY1MS ;延时1毫秒
;-----------------------------------
MOV R0,#80H ;给80H到09FH都置空格(20H)
MOV R1,#32 ;32个字符存储字节
CL2: MOV @R0,#20H
INC R0
DJNZ R1,CL2
MOV ASWRAM1,#00
MOV BSWRAM1,#00
;运行主程序
AA2:LCALL DS18B20_1 ;第一路温度测量
LCALL DS18B20_2
LCALL DS1820_JH
LCALL T_SC1 ;温度数送显示 第一路
LCALL SJ1 ;调用时钟计时
LCALL SW1 ;调用按键扫描
MOV A,RAM1602B
CJNE A,#00,AA11
LCALL LCD_SC1 ;调用正常显示
LJMP AA2
AA11: LCALL LCD_SCX1 ; 调用闪烁显示
AA10: LJMP AA2
;------------------------------------------ |
|