用RC振荡电路测量电阻R.docx
《用RC振荡电路测量电阻R.docx》由会员分享,可在线阅读,更多相关《用RC振荡电路测量电阻R.docx(16页珍藏版)》请在冰豆网上搜索。
用RC振荡电路测量电阻R
;用RC振荡电路测量电阻R
;振荡频率接到外部定时器T0
;液晶显示采用JMC1602C-HD44780
;键盘P2口独立式按键
;C=1UF
;R=200
;RX=721500/F-100欧姆
;RC振荡信号接T0(14)脚
;按下key0(P20)键可以保持测量数据
;============================================================
;HD44780引脚连接
;1GND
;2VDD
;3V0-GND对比度最亮
;4RS-P000写入指令,1写入数据
;5RW-GND只写不读,各数据指令之间延时
;6EN-P01下降沿写入指令
;7DB0
;8DB1
;9DB2
;10DB3
;11DB4-P04
;12DB5-P05
;13DB6-P06
;14DB7-P07
;15BL1
;16BL2
;工作方式:
只写不读,中间延时,4位数据宽度
;[注:
AT89S51使用12M晶振]
;=============================================================*/
;-------------------------------------
;LCD引脚定义
LCM_RSEQUP0.0
LCM_ENEQUP0.1
LCM_DATAEQUP0
F_INPUT_PINEQUP1.1;频率输入脚
LEDEQUP3.4
KEY0EQUP2.0
;...........................................
;变量定义
RCAP_BUF0_HEQU08H
RCAP_BUF0_LEQU09H
RCAP_BUF1_HEQU0AH
RCAP_BUF1_LEQU0BH
FRQ_HEQU0CH
FRQ_LEQU0DH
DISBUF0EQU0EH
DISBUF1EQU0FH
;位定义
FLAGEQU20H
RCAP_END_FGEQUFLAG.0
RCAP_FULL_FGEQUFLAG.1
CF_END_FGEQUFLAG.2
;------------------------------------------
T2CONDATA0C8H
RCAP2LDATA0CAH
RCAP2HDATA0CBH
TL2DATA0CCH
TH2DATA0CDH
TF2BIT0CFH
EXF2BIT0CEH
RCLKBIT0CDH
TCLKBIT0CCH
EXEN2BIT0CBH
TR2BIT0CAH
C_T2BIT0C9H
CP_RL2BIT0C8H
;以下是主程序开始
ORG0000H
AJMPSTART;转主程序
ORG0003H
RETI
ORG000BH
RETI
ORG0013H
RETI
ORG001BH
LJMPT1INT
ORG0023H
RETI
ORG002BH
RETI
;-------------------------------------------
ORG0030H
START:
MOVSP,#60H
;...........................................
CLRLCM_EN;LCD_EN初始状态0
LCALLINIT_LCD;初始化LCD
MOVR5,#10;延时等待
LCALLDELAY
;...........................................
MOVA,#0;0行
MOVB,#0;0列
MOVDPTR,#TITLE;字符串
LCALLLCD_PRN_STR;显示字符串"89c51RTEST"
MOVA,#1;1行
MOVB,#0;0列
MOVDPTR,#R_INFO;字符串
LCALLLCD_PRN_STR;显示字符串"R="
SJMP$
;...........................................
;初始化LCD
;功能设定指令
;┌——————┬—————————————————————————————┬———┐
;ㄧㄧ指令编码ㄧ执行ㄧ
;ㄧ指令功能├——┬——┬——┬——┬——┬——┬——┬——┬——┬——┤时间ㄧ
;ㄧㄧRSㄧR/WㄧDB7ㄧDB6ㄧDB5ㄧDB4ㄧDB3ㄧDB2ㄧDB1ㄧDB0ㄧ/usㄧ
;├——————┼——┼——┼——┼——┼——┼——┼——┼——┼——┼——┼———┤
;ㄧ功能设定ㄧ0ㄧ0ㄧ0ㄧ0ㄧ1ㄧDLㄧNㄧFㄧXㄧXㄧ40ㄧ
;└——————┴——┴——┴——┴——┴——┴——┴——┴——┴——┴——┴———┘
;功能:
设定数据总线位数、显示的行数及字型。
参数设定的情况如下:
;位名设置
;DL0=数据总线为4位1=数据总线为8位
;N0=显示1行1=显示2行
;F0=5×7点阵/每字符1=5×10点阵/每字符
;显示开关控制指令
;┌——————┬—————————————————————————————┬———┐
;ㄧㄧ指令编码ㄧ执行ㄧ
;ㄧ指令功能├——┬——┬——┬——┬——┬——┬——┬——┬——┬——┤时间ㄧ
;ㄧㄧRSㄧR/WㄧDB7ㄧDB6ㄧDB5ㄧDB4ㄧDB3ㄧDB2ㄧDB1ㄧDB0ㄧ/usㄧ
;├——————┼——┼——┼——┼——┼——┼——┼——┼——┼——┼——┼———┤
;ㄧ显示开关控制ㄧ0ㄧ0ㄧ0ㄧ0ㄧ0ㄧ0ㄧ1ㄧDㄧCㄧBㄧ40ㄧ
;└——————┴——┴——┴——┴——┴——┴——┴——┴——┴——┴——┴———┘
;功能:
控制显示器开/关、光标显示/关闭以及光标是否闪烁。
参数设定的情况如下:
;位名设置
;D0=显示功能关1=显示功能开
;C0=无光标1=有光标
;B0=光标闪烁1=光标不闪烁
;设定显示屏或光标移动方向指令
;
;┌——————┬—————————————————————————————┬———┐
;ㄧㄧ指令编码ㄧ执行ㄧ
;ㄧ指令功能├——┬——┬——┬——┬——┬——┬——┬——┬——┬——┤时间ㄧ
;ㄧㄧRSㄧR/WㄧDB7ㄧDB6ㄧDB5ㄧDB4ㄧDB3ㄧDB2ㄧDB1ㄧDB0ㄧ/usㄧ
;├——————┼——┼——┼——┼——┼——┼——┼——┼——┼——┼——┼———┤
;ㄧ设定显示屏或ㄧ0ㄧ0ㄧ0ㄧ0ㄧ0ㄧ1ㄧS/CㄧR/LㄧXㄧXㄧ40ㄧ
;ㄧ光标移动方向ㄧㄧㄧㄧㄧㄧㄧㄧㄧㄧㄧㄧ
;└——————┴——┴——┴——┴——┴——┴——┴——┴——┴——┴——┴———┘
;功能:
使光标移位或使整个显示屏幕移位。
参数设定的情况如下:
;S/CR/L设定情况
;00光标左移1格,且AC值减1
;01光标右移1格,且AC值加1
;10显示器上字符全部左移一格,但光标不动
;11显示器上字符全部右移一格,但光标不动
;清屏指令
;
;┌——————┬—————————————————————————————┬———┐
;ㄧㄧ指令编码ㄧ执行ㄧ
;ㄧ指令功能├——┬——┬——┬——┬——┬——┬——┬——┬——┬——┤时间ㄧ
;ㄧㄧRSㄧR/WㄧDB7ㄧDB6ㄧDB5ㄧDB4ㄧDB3ㄧDB2ㄧDB1ㄧDB0ㄧ/msㄧ
;├——————┼——┼——┼——┼——┼——┼——┼——┼——┼——┼——┼———┤
;ㄧ清屏ㄧ0ㄧ0ㄧ0ㄧ0ㄧ0ㄧ0ㄧ0ㄧ0ㄧ0ㄧ1ㄧ1.64ㄧ
;└——————┴——┴——┴——┴——┴——┴——┴——┴——┴——┴——┴———┘
;功能:
<1>清除液晶显示器,即将DDRAM的内容全部填入"空白"的ASCII码20H;
;<2>光标归位,即将光标撤回液晶显示屏的左上方;
;<3>将地址计数器(AC)的值设为0。
INIT_LCD:
MOVLCM_DATA,#30H;4位I/O初始化
LCALLEN;写动作
MOVR5,#2;延时等待
LCALLDELAY
MOVLCM_DATA,#30H;4位I/O初始化
LCALLEN;写动作
MOVR5,#2;延时等待
LCALLDELAY
MOVLCM_DATA,#30H;4位I/O初始化
LCALLEN;写动作
MOVR5,#2;延时等待
LCALLDELAY
MOVLCM_DATA,#20H;4位I/O初始化
LCALLEN;写动作
MOVR5,#2;延时等待
LCALLDELAY
MOVA,#28H
LCALLWCOM
MOVR5,#1;延时等待;
LCALLDELAY
MOVA,#0CH
LCALLWCOM
MOVR5,#1;延时等待;作者:
刘玉宏
LCALLDELAY
MOVA,#01H;显示清屏
LCALLWCOM
MOVR5,#1;延时等待
LCALLDELAY
RET
;-----------------------------------------------------------------
;产生下降沿用于写命令;
EN:
SETBLCM_EN
LCALLDE
CLRLCM_EN
LCALLDE
RET
;-----------------------------------------------------------------
DE:
MOVR7,#10
DJNZR7,$
RET
;-----------------------------------------------------------------
;写命令
;参数传递A;
WCOM:
PUSHB
MOVB,A;A暂存
ANLA,#0F0H;清除低4位,保持LCD_EN为0
MOVLCM_DATA,A;写高4位
CLRLCM_RS;写命令LCM_RS=0
LCALLEN;写动作
MOVA,B;取出保存的参数
RLCA
RLCA
RLCA
RLCA;4位方式先写高4位,再写低4位
ANLA,#0F0H;清除低4位,保持LCD_EN为0
MOVLCM_DATA,A
CLRLCM_RS;写命令LCM_RS=0
LCALLEN;写动作
POPB
RET;、
;--------------------------------------------------------------------
;-----------------------------------------------------------------
;写数据
;参数传递A
WDATA:
PUSHB
MOVB,A;A暂存
ANLA,#0F0H;清除低4位,保持LCD_EN为0
MOVLCM_DATA,A
SETBLCM_RS;写数据LCM_RS=1
LCALLEN;写动作
MOVA,B;取出保存的参数
RLCA
RLCA
RLCA
RLCA;4位方式先写高4位,再写低4位
ANLA,#0F0H;清除低4位,保持LCD_EN为0
MOVLCM_DATA,A
SETBLCM_RS;写数据LCM_RS=1
LCALLEN;写动作
POPB;
RET
;--------------------------------------------------------------------
;延时R5*10MS
DELAY:
MOVR6,#50
D1:
MOVR7,#100
DJNZR7,$
DJNZR6,D1
DJNZR5,DELAY
RET
;--------------------------------------------------------------------
;在第0行指定位置显示字符
;参数A显示字符的ascii码,B显示的位置
LCDP0:
PUSHACC
MOVA,B
;设定DDRAM地址指令
;
;┌——————┬—————————————————————————————┬———┐
;ㄧㄧ指令编码ㄧ执行ㄧ
;ㄧ指令功能├——┬——┬——┬——┬——┬——┬——┬——┬——┬——┤时间ㄧ
;ㄧㄧRSㄧR/WㄧDB7ㄧDB6ㄧDB5ㄧDB4ㄧDB3ㄧDB2ㄧDB1ㄧDB0ㄧ/usㄧ
;├——————┼——┼——┼——┼——┴——┴——┴——┴——┴——┴——┼———┤
;ㄧ设定CGRAMㄧ0ㄧ0ㄧ1ㄧDDRAM的地址(7位)ㄧ40ㄧ
;ㄧ地址ㄧㄧㄧㄧㄧㄧ
;└——————┴——┴——┴——┴————————————————————┴———┘
;功能:
设定下一个要存入数据的CGRAM的地址。
;DDRAM地址与显示位置的对应关系;作者:
刘玉宏
;
;╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
;┊┊
;┊00H01H02H03H04H05H06H07H08H09H0AH0BH0CH0DH0EH0FH┊
;┊┊
;┊40H41H42H43H44H45H46H47H48H49H4AH4BH4CH4DH4EH4FH┊
;┊┊
;╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
ADDA,#80H;第一行地址
LCALLWCOM
POPACC;数据
LCALLWDATA
RET
;--------------------------------------------------------------------
;在第1行指定位置显示字符
;参数A显示字符的ascii码,B显示的位置
LCDP1:
PUSHACC
MOVA,B
;设定DDRAM地址指令
;
;┌——————┬—————————————————————————————┬———┐
;ㄧㄧ指令编码ㄧ执行ㄧ
;ㄧ指令功能├——┬——┬——┬——┬——┬——┬——┬——┬——┬——┤时间ㄧ
;ㄧㄧRSㄧR/WㄧDB7ㄧDB6ㄧDB5ㄧDB4ㄧDB3ㄧDB2ㄧDB1ㄧDB0ㄧ/usㄧ
;├——————┼——┼——┼——┼——┴——┴——┴——┴——┴——┴——┼———┤
;ㄧ设定CGRAMㄧ0ㄧ0ㄧ1ㄧDDRAM的地址(7位)ㄧ40ㄧ
;ㄧ地址ㄧㄧㄧㄧㄧㄧ
;└——————┴——┴——┴——┴————————————————————┴———┘
;功能:
设定下一个要存入数据的CGRAM的地址。
;DDRAM地址与显示位置的对应关系
;
;╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
;┊┊
;┊00H01H02H03H04H05H06H07H08H09H0AH0BH0CH0DH0EH0FH┊
;┊┊
;┊40H41H42H43H44H45H46H47H48H49H4AH4BH4CH4DH4EH4FH┊
;┊┊
;╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯
ADDA,#0C0H;第二行地址
LCALLWCOM
POPACC;数据
LCALLWDATA
RET
;--------------------------------------------------------------------
;在指定位置显示一行字符串(以0结尾),不检查是否超长,没有考虑空格覆盖以后的内容
;参数A行,B列,DPTR字符串指针
LCD_PRN_STR:
CJNEA,#0,LINE2
LINE1:
MOVA,B
ADDA,#80H;第0行地址;
LCALLWCOM
LJMPFILL
LINE2:
MOVA,B
ADDA,#0C0H;第1行地址
LCALLWCOM
LJMPFILL
FILL:
CLRA
MOVCA,@A+DPTR
CJNEA,#0,L1
RET
L1:
;
LCALLWDATA
INCDPTR
AJMPFILL
;--------------------------------------------------------------------
TITLE:
DB'89C51RTEST',0
R_INFO:
DB'R=',0
;--------------------------------------------------------------------
END