用RC振荡电路测量电阻R.docx
《用RC振荡电路测量电阻R.docx》由会员分享,可在线阅读,更多相关《用RC振荡电路测量电阻R.docx(13页珍藏版)》请在冰豆网上搜索。
![用RC振荡电路测量电阻R.docx](https://file1.bdocx.com/fileroot1/2022-10/8/ad59afda-04bf-467a-b58e-5c54ba4c1531/ad59afda-04bf-467a-b58e-5c54ba4c15311.gif)
用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;、
;--------------------------------------------------------------------
;--------