请大家帮忙看一下这个单片机程序

cba01
请大家帮忙看一下这个单片机程序
导读:用计算机连接“单片机综合仿真实验仪”来看内部存储器的值判断输入的温度值。 就看TEMPER_L、TEMPER_H、TEMPER_NUM这三个字节的值。 看来你都不会用仿真功能。 不是VIEW,而是debug。首先,你用的是“仿真实验仪”,先

用计算机连接“单片机综合仿真实验仪”来看内部存储器的值判断输入的温度值。

就看TEMPER_L、TEMPER_H、TEMPER_NUM这三个字节的值。

看来你都不会用仿真功能。

不是VIEW,而是debug。首先,你用的是“仿真实验仪”,先理解了什么叫仿真再说。

单片机在上电运行的时候,程序执行很快的,在晶振在12m的情况下,执行一条指令也就两三微秒的时间。程序刚编写出来的时候,百分之六七十会有逻辑错误(注意编译器只能检查程序的语法问题)或者程序不符合实际的部分需要。所以要用debug(调试)功能。简单的说就是用计算机控制单片机程序一步一步的执行,或者执行到某个地方看数据的值。程序写完了编译好了就点debug下拉菜单的之一个选线,之后这个菜单的下面有会亮的的选项中有四个是调试常用的“RUN、STEP、STEP OVER。STOP RUNING”,如果选RUN,就是计算机通知仿真仪正常执行程序,这时程序执行得很快,啥也看不到,点STEP就是点一下鼠标,计算机就通知仿真仪执行一条程序。STEP OVER跟前一个功能差不多,区别在于STEP是不管主程序还是子程序每条指令都执行,STEP OVER只执行主程序里的指令,遇到主程序调用子程序的时候,子程序只是一步执行过去。STOP RUNING就是停止RUN。

你可以用STEP或者STEP OVER一步一步执行到接收温度值的那部分程序,然后看左边Project Workspace会给显示那三个字节的信息的。

这跟微机原理里的DEBUG调试差不多的。

这就叫做单片机的仿真。

查书吧 具体的 我就能给你说一下之一道题的做法

以之一片为例

看138的真值表 y0 输出为0 假设CBA分别为001 那么地址就是

001 0000 0000 0000------001 1111 1111 1111

其他片类似

至于其他的程序啥的 找找书上类似的吧

DS18B20温度传感器、LCD1602液晶显示的代码

;XRF多功能51单片机开发板

;DS18B20测温程序(液晶显示,可测量0-99度)

;

;

TEMPER_L EQU 36H ;从DS18B20中读回高位,低位暂存区

TEMPER_H EQU 35H ;

TEMPER_NUM EQU 60H;温度值存储

TEMPER_GE EQU 61H

TEMPER_SHI EQU 62H

TEMPER_SAVE EQU 63H

FLAG1 BIT 00H

FLAG2 BIT 01H

RS BIT p20;液晶控制接口

RW BIT p21

E BIT p22

DQ BIT p35;单总线口

ORG 0000H

AJMP MAIN

ORG 0030H

MAIN: MOV SP,#70H

LCALL GET_TEMPER

LCALL TEMPER_COV

LCALL LCDDISP

lcall d100ms

lcall d100ms

LJMP MAIN

NOP

;

;读出转换后的温度值

;

GET_TEMPER:

SETB DQ ; 定时入口

BCD: LCALL INIT_1820

JB FLAG1,S22

LJMP BCD ; 若DS18B20不存在则返回

S22: LCALL DELAY1

MOV A,#0CCH ; 跳过ROM匹配------0CC命令

LCALL WRITE_1820

MOV A,#44H ; 发出温度转换命令

LCALL WRITE_1820

LCALL D100MS

CBA:LCALL INIT_1820

JB FLAG1,ABC

LJMP CBA

ABC:LCALL DELAY1

MOV A,#0CCH ; 跳过ROM匹配

LCALL WRITE_1820

MOV A,#0BEH ; 发出读温度命令

LCALL WRITE_1820

LCALL READ_18200 ;READ_1820

RET

;

;读DS18B20的程序,从DS18B20中读出一个字节的数据

;

READ_1820:

MOV R2,#8

RE1:

CLR C

SETB DQ

NOP

NOP

CLR DQ

NOP

NOP

NOP

SETB DQ

MOV R3,#7

DJNZ R3,$

MOV C,DQ

MOV R3,#23

DJNZ R3,$

RRC A

DJNZ R2,RE1

RET

;

;写DS18B20的程序

;

WRITE_1820:

MOV R2,#8

CLR C

WR1:

CLR DQ

MOV R3,#6

DJNZ R3,$

RRC A

MOV DQ,C

MOV R3,#23

DJNZ R3,$

SETB DQ

NOP

DJNZ R2,WR1

SETB DQ

RET

;

;读DS18B20的程序,从DS18B20中读出两个字节的温度数据

;

READ_18200:

MOV R4,#2 ; 将温度高位和低位从DS18B20中读出

MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)

RE00:

MOV R2,#8

RE01:

CLR C

SETB DQ

NOP

NOP

CLR DQ

NOP

NOP

NOP

SETB DQ

MOV R3,#7

DJNZ R3,$

MOV C,DQ

MOV R3,#23

DJNZ R3,$

RRC A

DJNZ R2,RE01

MOV @R1,A

DEC R1

DJNZ R4,RE00

RET

;;

;将从DS18B20中读出的温度数据进行转换

;;

TEMPER_COV:

MOV A,#0F0H

ANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值

SWAP A

MOV TEMPER_NUM,A ;得到低四位

MOV A,TEMPER_L

JNB ACC3,TEMPER_COV1 ; 四舍五入去温度值

INC TEMPER_NUM

TEMPER_COV1:

MOV A,TEMPER_H

ANL A,#07H

SWAP A

ORL A,TEMPER_NUM ;得到高四位,再与低四位相或得到值

MOV TEMPER_NUM,A ; 保存变换后的温度数据

LCALL BIN_BCD

RET

;;

;将16进制的温度数据转换成压缩BCD码

;;

BIN_BCD:

MOV A,TEMPER_NUM

MOV B,#10

DIV AB

MOV TEMPER_SHI,A

MOV TEMPER_GE,B

RET

;

;DS18B20初始化程序

;;

INIT_1820:

SETB DQ

NOP

CLR DQ

MOV R0,#250

TSR1:

DJNZ R0,TSR1 ; 延时520us

SETB DQ

MOV R0,#25H ;96US-25H

TSR2:

DJNZ R0,TSR2

JNB DQ,TSR3;如D0为低则复位成功,DS18B20存在

LJMP TSR4 ; 延时

TSR3:

SETB FLAG1 ; 置标志位,表示DS1820存在

LJMP TSR5

TSR4:

CLR FLAG1 ; 清标志位,表示DS1820不存在

LJMP TSR7

TSR5:

MOV R0,#06BH ;200US

TSR6:

DJNZ R0,TSR6 ; 延时

TSR7:

SETB DQ ;拉高总线

RET

;

;数码显示程序

;

;

;液晶显示程序

;

LCDDISP:

mov p1,#01h;清屏

call enrw

mov p1,#38h;设为8位,5*7字 型两行

call enrw

mov p1,#0Ch

call enrw

mov p1,#06h

call enrw

mov p1,#80h

call enrw

mov dptr,#yjtab

call rwram

mov p1,#0C0h

call enrw

mov dptr,#yjtab1

call rwram

W_TEM:

mov p1,#0CCh

call enrw

MOV DPTR,#ASCII

MOV A,TEMPER_SHI

MOVC A,@A+DPTR

MOV P1,A

setb rs

clr rw

clr e

call D500us

setb e

MOV DPTR,#ASCII

MOV A,TEMPER_GE

MOVC A,@A+DPTR

MOV P1,A

setb rs

clr rw

clr e

call D500us

setb e

RET

enrw:clr rs

clr rw

clr e

call D500us

setb e

ret

rwram:mov r1,#00h

a1: mov a,r1

movc a,@a+dptr

call rwram2

inc r1

cjne a,#00h,a1

ret

rwram2:mov p1,a

setb rs

clr rw

clr e

call D500us

setb e

ret

;R

;延时子程序

;

D500us:

MOV R6,#250;延时500us

DJNZ R6,$

RET

DELAY1:MOV R7,#20H

DJNZ R7,$

RET

D100MS: MOV R6,#200

D2: MOV R5,#250

DJNZ R5,$

DJNZ R6,D2

RET

yjtab: db ' XRF MCS-51 ',00h

yjtab1:db 'temperature:`C',00h

ASCII: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H

end