tl3ah(tl3845p引脚图及功能)

币安下载

Binance币安交易所

全球最大加密货币交易所,注册100%可领取100USDT奖励!通过本站注册不仅可以享受手续费折扣同时有机会获得币安周边

点击注册 更多线路

更多交易所入口

一站式注册各大交易所、点击进入加密世界、永不失联,币安Binance/欧易OKX/GATE.IO芝麻开门/Bitget/抹茶MEXC/火币Huobi

点击进入 永不失联


什么叫做单片机中的“溢出标志”?


                

0V——溢出标志,对于单字节的有符号数,若用最高位(b7)表示正、负号,则只有7位有效数位(b6~b0),能表示-128~+127之间的数。


运算结果超出了这个数值范围,就会发生溢出,此时0V=1,否则0V=0。此外,在执行乘法指令时,0V=1表示乘积超过255;在执行除法指令时,0V=1表示除数为0。






扩展资料


定时器中断由单片机中的定时器溢出而申请的中断。51单片机中有两个定时器T0和T1:TF0:定时器T0溢出中断请求。当定时器TO产生溢出时,TO中断请求标志TF0置1,请求中断处理。TF1:定时器T1溢出中断请求。当定时器Tl产生溢出时,T1中断请求标志TF1置1,请求中断处理。


F0,用户标志位:该位可由用户置1或清0,用于实现某些测控功能。?


AC,半进位标志位:当CPU进行加法(或减法)运算时,如果低半字节(b3~b0)向高半字节(b7~b4)有进位(或借位),即b3向b4进位(或借位)时,AC置1,否则清0。AC可用于BCD码加法时的调整判别位。


CY,进位标志位: 当CPU进行加法(或减法)运算时,如果运算结果的最高位(b7)有进位(或借位),CY则置1,否则清0。


参考资料来源:百度百科-定时器中断


参考资料来源:百度百科-PSW


基于单片机多功能数字钟


                

带万年历的LCD显示多功能数字钟


程序清单:


;????????????????????SMC1602接口程序(MCS51模拟口线方式)


;***************************************************************************


;连线图:?*LCM---8031*?*LCM---8031*?*LCM------------8031*


;????????*DB0---P0.0*?*DB4---P0.4*?*RS-------------P2.0*


;????????*DB1---P0.1*?*DB5---P0.5*?*RW-------------P2.1*


;????????*DB2---P0.2*?*DB6---P0.6*?*E--------------P2.2*??


;????????*DB3---P0.3*?*DB7---P0.7*?*VLCD接10K可调电阻到GND*


;注:8051的晶振频率为11.0592MHz?R0设置数据存放?S8为设置键?S7为加键?S4为确认键


;**************************************************************************


;P0口液晶显示


;?P2.4位选键P2.3加一键P2.2返回键及报时功能键闹钟设置P2.0控制显示键


;寄存器?clr?rs0?setb?rs1?R0?R4?R5在按键中用到??延时中用到?SETB?RS0???SETB?RS1的R0?R1?R2???????


;SETB?RS0??CLR?RS1显示中用到??CLR??RS0??CLR??RS1?在闹钟调整子程序中用到R1


?


;*********************************************************************


;


;报时功能P2.6????和闹钟功能P2.5??闹钟调整时间功能已经可以设置?????显示的切换方式变了???再关闭的情况下一切正常运行


;*****************************


?RSPIN???BIT?????P1.2


?RWPIN???BIT?????P1.1


?EPIN????BIT?????P1.0


?


?WEIXUAN?BIT?P2.4?;位选键设置键


?JIAJIAN?BIT?P2.3?;加一键


?JIANJIAN?BIT?P2.2?;减一键


?FANHUI?BIT?P2.1?;返回键


?NZKG?BIT?P2.0?;闹钟设置键


?


?


?


?SECONTL?EQU?30H?;秒


?SECONTH?EQU?31H?;秒


?MAOHAOL?EQU?32H?;:


?MINIUTL?EQU?33H?;分


?MINIUTH?EQU?34H?;分


?MAOHAOH?EQU?35H?;:


?HOURL?EQU?36H?;时


?HOURH?EQU?37H?;时


;*****************************日期部分***************************


?DAYL?EQU?40H?;日个


?DAYH?EQU?41H?;日十?


?HENL?EQU?42H?;-


?MONTHL?EQU?43H?;yue


?MONTHH?EQU?44H?;yue


?HENH?EQU?45H?;-


?YEARO?EQU?46H?;年


?YEART?EQU?47H


?YEARS?EQU?48H


?YEARF?EQU?49H


?TEMP?EQU?50H???;用做存储单元显示子程序(DISPLAY)里用到


?BIJIAO?EQU?51H?;加一子程序(JIAYI)中用到


?ZDRQO?EQU?55H?;中断加一程序中用到?


?ZDRQT?EQU?56H?;中断加一程序中用到


?ZDRQS?EQU?57H?;中断加一程序中用到


?ZDRQF?EQU?58H?;中断加一程序中用到


?DIZHI?EQU?59H?;键盘(JIANPAN)子程序里用到


?NZBZ?BIT?60H?;定时标志位在(闹钟开关部分)


?


?


?;38H到3FH没用到


?


?BSCSBZ?BIT?39H?;报时次数转换标志????(BSCS)里用到


?BSCSCC?EQU?3AH?;报时次数存储??(BSCS)里用到


?ZDBSBZ?BIT?3BH?;整点报时标志??(SSBS)里用到


?ZMBSBZ?BIT?3CH?;整秒闪烁标志??(SSBS)里用到


?BSKGBZ?BIT?3DH?;报时开启标志??(BSKG)里用到


?XKQHBZ?BIT?3EH?;显示开启关闭标志?(XIANKONG)里用到


?


?


?ORG?0000H


?AJMP?MAIN


?ORG?000BH


?AJMP?ZD


?ORG?0030H


MAIN:??MOV?SP,#60H??;给堆栈指针赋初值


?MOV?30H,#05H?;秒


?MOV?31H,#05H?;秒


?MOV?32H,#3AH?;:


?MOV?33H,#09H?;分


?MOV?34H,#05H?;分


?MOV?35H,#3AH?;:


?MOV?36H,#03H?;时


?MOV?37H,#01H?;时


;*****************************日期部分***************************


?MOV?40H,#09H?;日个


?MOV?41H,#02H?;日十?


?MOV?42H,#2DH?;-


?MOV?43H,#09H?;yue


?MOV?44H,#00H?;yue


?MOV?45H,#2DH?;-


?MOV?46H,#09H?;年


?MOV?47H,#09H


?MOV?48H,#09H


?MOV?49H,#02H


?CLR??P2.5??;闹钟


?CLR?P2.6??;整点报时


?


?MOV?03H,#00H??;闹钟分个位


?MOV?04H,#00H??;闹钟分十位


?MOV?06H,#04H??;闹钟时个位


?MOV?07H,#01H??;闹钟时十位


?


?;CLR??P1.5


?;CLR?P1.4


?


???????MOV????B,#20


?MOV????TMOD,#01H?????;定时器工作方式1


?MOV?TH0,#4CH


???MOV?TL0,#08H


??SETB?ET0?????????????????;允许T0中断


???SETB?EA??????????????????;总中断开放


?LCALL????LCDRESET????;初始化LCD


????????LCALL?DISPSTART?;调用显示初始状态


????????SETB?TR0???;开启定时器


????????


????????CLR?NZBZ??;闹钟开启关闭标志


????????CLR?BSKGBZ??;报时开启关闭标志


???????CLR?XKQHBZ??;显示开启关闭标志


?????????


LOOP:?LCALL?JIANPAN??;按键子程序


?LCALL?DISPLAY??;显示子程序


?LCALL?NZBF??;NAOZHONG??BUFENG?


?LCALL?NZBJ??;NAOZHONG?BIJIAO


?LCALL?BSKG??;BAOSHIKAIGUAN


?LCALL?BSCS??;BAOSHICISHU


?LCALL?SSBS??;闪烁报时


?SJMP?LOOP


;==============================中断加一程序===================================


ZD:?PUSH?ACC


?MOV?TH0,#4CH


???MOV?TL0,#08H


???DJNZ?B,ZDEND


???MOV????B,#20


???


?INC?SECONTL


?SETB?ZMBSBZ


?MOV?A,SECONTL


?CJNE?A,#0AH,ZDEND


?MOV?SECONTL,#00H


?INC??SECONTH


?MOV?A,SECONTH


?CJNE?A,#06H,ZDEND


?MOV?SECONTH,#00H


?INC?MINIUTL


?MOV?A,MINIUTL


?CJNE?A,#0AH,ZDEND


?MOV?MINIUTL,#00H


?INC??MINIUTH


?MOV?A,MINIUTH


?CJNE?A,#06H,ZDEND


?MOV?MINIUTH,#00H


?INC??HOURL


?SETB?BSCSBZ


?SETB?ZDBSBZ


?MOV?A,HOURL???;24小时的判断


?CJNE?A,#04H,ZDF


?MOV?A,HOURH


?CJNE?A,#02H,ZDEND


?MOV?HOURL,#00H


?MOV?HOURH,#00H


?LCALL?ZDRQ


?SJMP?ZDEND


ZDF:?CJNE?A,#0AH,ZDEND


?MOV?HOURL,#00H


?INC??HOURH


ZDEND:?POP?ACC


?RETI?


?


?;日期部分


ZDRQ:?PUSH?ACC


?INC?DAYL


?;判断天数28,30,31部分


?MOV?A,MONTHH??;用于判断月份时为31天30天28天


?CJNE?A,#01H,LL


?MOV?55H,#0AH??;存放月份的十位转化为个位是0AH


?MOV?A,MONTHL


?ADD?A,55H???;月分高低相加用于查表


?SJMP?LL3


LL:?MOV?A,MONTHL


?ADD?A,MONTHH


LL3:?MOV?56H,A???;存放相加后的月份数据


?MOV?DPTR,#TAB5


?MOVC?A,@A+DPTR??;查十位和天数的十位比较


?MOV?57H,A


?MOV?A,56H


?MOV?DPTR,#TAB6??;查个位和天数的个位比较


?MOVC?A,@A+DPTR


?MOV?58H,A


?MOV?A,DAYH


?CJNE?A,57H,LL2


?MOV?A,DAYL


?CJNE?A,58H,LL2


?MOV?DAYH,#00H


?MOV?DAYL,#01H


?SJMP?LL4


LL2:?MOV?A,DAYL


?CJNE?A,#0AH,ZDRQEND


?MOV?DAYL,#00H


?INC?DAYH


?MOV?A,DAYH???;比较天数是否要进位


?CJNE?A,57H,ZDRQEND


?MOV?A,DAYL


?CJNE?A,58H,ZDRQEND


?MOV?DAYH,#00H


?MOV?DAYL,#01H


?


?;月份和年份


?


LL4:?INC?MONTHL


?MOV?A,MONTHL


?CJNE?A,#03H,ZDRQ1??;用于判断月份时为12月时进位


?MOV?A,MONTHH


?CJNE?A,#01H,ZDRQ1


?MOV?MONTHL,#01H??;天数符合要求


?MOV?MONTHH,#00H


?SJMP?ZDRQ2


?


ZDRQ1:?CJNE?A,#0AH,ZDRQEND


?MOV?MONTHL,#00H


?INC?MONTHH


?SJMP?ZDRQEND


ZDRQ2:?INC?YEARO???;年的加一


?MOV?A,YEARO


?CJNE?A,#0AH,ZDRQEND


?MOV?YEARO,#00H


?INC?YEART???;年的进位


?MOV?A,YEART


?CJNE?A,#0AH,ZDRQEND


?MOV?YEART,#00H


?INC?YEARS


?MOV?A,YEARS


?CJNE?A,#0AH,ZDRQEND


?MOV?YEARS,#00H


?INC?YEARF


?MOV?A,YEARF


?CJNE?A,#0AH,ZDRQEND


?MOV?YEARF,#00H


??


ZDRQEND:?


?POP?ACC


?RET


;液晶初始化


;========================初始化程序=======================================


LCDRESET:???????????????????????;初始化程序


????????LCALL????DELAY5MS????????;延时15MS


????????LCALL????DELAY5MS


????????LCALL????DELAY5MS


????????MOV?A,#38H??????????;显示模式设置(不检测忙信号)


????????LCALL????LCDWCN??????????;共三次


????????LCALL????DELAY5MS


????????MOV?????A,#38H


????????LCALL????LCDWCN


????????LCALL????DELAY5MS


????????MOV?????A,#38H???????????????


????????LCALL????LCDWCN


????????MOV?????A,#38H??????????;显示模式设置(以后均检测忙信号)


????????LCALL????LCDWC


????????MOV?????A,#08H??????????;显示关闭


????????LCALL????LCDWC


????????MOV?????A,#01H??????????;显示清屏


????????LCALL????LCDWC


????????MOV?????A,#06H??????????;显示光标移动设置


????????LCALL????LCDWC


????????MOV?????A,#0CH??????????;显示开及光标设置


????????LCALL????LCDWC


????????RET


;==============================写指令===================================


LCDWC:??????????????????????????;送控制字子程序(检测忙信号)


????????LCALL????WAITIDLE????????


????????;******写指令*******;送控制字子程序(不检测忙信号)


LCDWCN:?CLR?????RSPIN???????????;RS=0?RW=0?E=高脉冲


????????CLR?????RWPIN


????????MOV?????P0,A


????????SETB????EPIN??;(


????????NOP???;给高电平脉冲


????????CLR?????EPIN??;)


????????RET???????


;==========================写数据=======================================????????


LCDWD:??????????????????????????????;写字符子程序


????????LCALL????WAITIDLE


????????SETB????RSPIN???????????????;RS=1?RW=0?E=高脉冲


????????CLR?????RWPIN


????????MOV?????P0,A


????????SETB????EPIN


????????NOP


????????CLR?????EPIN


????????RET


;===============================等待控制器空闲==================================


WAITIDLE:


????????PUSH????ACC?????????????????;正常读写操作之前必须检测LCD控制器状态


????????MOV?????P0,#0FFH


???????lcall?DELAY5MS??;4566666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666


????????CLR?????RSPIN???????????????;RS=0?RW=1?E=高电平


????????SETB????RWPIN


????????SETB????EPIN


????????lcall?DELAY5MS??;465555546465464654648791313848946113134849845461313579641613131354649498


WTD_PA:?NOP?????????????????????????;DB7:????0??LCD控制器空闲


????????JB??????P0.7,WTD_PA?????????;????????1??LCD控制器忙


????????CLR?????EPIN


????????POP?????ACC


????????RET?????????


;***********************初始状态子程序*******************************?


DISPSTART:???;显示初始状态子程序


?PUSH?ACC


?MOV?A,#80H


????????LCALL?LCDWC


?MOV?????DPTR,#TAB?;显示字符


DISP1:?CLR?A


?MOVC?A,@A+DPTR


?JZ?DISP2


?LCALL?LCDWD


?INC?DPTR


?SJMP?DISP1


DISP2:?MOV?A,#0C0H


?LCALL?LCDWC


?MOV?DPTR,#TAB1


DISP3:?CLR?A


?MOVC?A,@A+DPTR


?JZ?DISP_END


?LCALL?LCDWD


?INC?DPTR


?SJMP?DISP3


DISP_END:


?POP?ACC


?RET???


;==========================显示子程序=======================================???????


DISPLAY:PUSH?PSW


?PUSH?ACC


?SETB?RS0


?CLR?RS1


?MOV?A,#85H


?LCALL?LCDWC


?MOV?R1,#38H???;第一行显示数据存储单元的启始地址


?MOV?TEMP,#30H??;第一行显示数据存储单元的结束地址


?MOV?R6,#2


?


PLAY:?DEC?R1???


?CJNE?R1,#32H,PLY??;判断是否为冒号位


?MOV?A,MAOHAOL??;是者送冒号的ACSI码


?SJMP?PLAY1


PLY:?CJNE?R1,#35H,PLY1


?MOV?A,MAOHAOH


?SJMP?PLAY1


PLY1:?CJNE?R1,#42H,PLY2??;判断是否为横杠的位置


?MOV?A,HENL???;是者送横杠的ACSI码


?SJMP?PLAY1


PLY2:?CJNE?R1,#45H,PLY3


?MOV?A,HENH


?SJMP?PLAY1


?


?


PLY3:?MOV?A,@R1???;用查表法送要显示的数据


?MOV?DPTR,#TAB2


?MOVC?A,@A+DPTR


PLAY1:?LCALL?LCDWD


?MOV?A,R1


?CJNE?A,TEMP,PLAY??;判断第一行是否显示好了


?MOV?A,#0C5H


?LCALL?LCDWC


?MOV?R1,#4AH???;第二行显示数据存储单元的启始地址


?MOV?TEMP,#40H??;第二行的结束地址


?DJNZ?R6,PLAY???;R6为0时两行显示结束


?


?POP?ACC


?POP?PSW


?RET?


;************************按键子程序************************?


?


JIANPAN:clr?rs0??????;键盘子程序


?setb?rs1??;键盘子程序?


?JB?WEIXUAN,JIAN_ZEND?;设置键的判断


?LCALL?DELAY5MS


?JB?WEIXUAN,JIAN_ZEND


?PUSH?ACC


?JNB?WEIXUAN,$


?;MOV?A,#0FH??;开启光标闪烁设置


?;LCALL?LCDWCN


fah:?JNB?NZBZ,JPNZSJ?;为“1”闹钟???为“0”时钟


?LCALL?JPXS


?MOV?R4,#86H??;闹钟设定时间R4存放显示位地址


?MOV?R5,#2??;闹钟设定时间第一行第二行?????位置改变次数


?MOV?DIZHI,#8CH?;闹钟设定时间第一行结束地址


?MOV?R0,#06H


?SJMP?GIVED


JPNZSJ:?CLR?TR0


?MOV?R4,#86H??;R4存放显示位地址


?MOV?R5,#2??;第一行第二行?????位置改变次数


?MOV?DIZHI,#8DH?;第一行结束地址


?MOV?R0,#36H?


GIVED:?MOV?A,#0FH??;开启光标闪烁设置555555555555555555555555555555555555555555555


?LCALL?LCDWCN


?MOV?A,R4??


?LCALL?LCDWC?


UPONE:?JB?FANHUI,UPtwo?;返回键的判断


?LCALL?DELAY5MS


?JB?FANHUI,UPtwo


?JNB?FANHUI,$


?SJMP?GOBACK


JIAN_ZEND:SJMP?JIAN_END?;中继跳转6666666666666666666666666666666666666666666666666666666666666666


UPtwo:?JB?JIAJIAN,IAM?;加一键的判断


?LCALL?DELAY5MS


?JB?JIAJIAN,IAM


?JNB?JIAJIAN,$


?LCALL?JIAYI??;调用按键加一子程序


?


?;MOV?A,#0FH??;开启光标闪烁设置555555555555555555555555555555555555555555555


?;LCALL?LCDWCN


IAM:?JB?JIANJIAN,IAM22?;减一键的判断


?LCALL?DELAY5MS


?JB?JIANJIAN,IAM22


?JNB?JIANJIAN,$


?LCALL?JIANYI?;调用按键减一子程序


??


?AJMP?GIVED


IAM22:??JB?WEIXUAN,UPONE?;位选键的判断


?LCALL???DELAY5MS


?JB?WEIXUAN,UPONE


?JNB?WEIXUAN,$


?DEC?R0


?INC?R4?


?LCALL?JIAN??;调用位选比较程序


?CJNE?r4,#88H,JJ11


?DEC?R0


?INC?R4


?SJMP????JJ22


JJ11:?CJNE?r4,#8BH,JJ22


?DEC?R0


?INC?R4


JJ22:?MOV?A,R4


?CJNE?A,DIZHI,GIVED


?JB?NZBZ,fah??;为“1”闹钟???为“0”时钟


?MOV?R4,#0C5H


?MOV?DIZHI,#0CFH


?MOV?R0,#49H


?DJNZ?R5,GIVED


?LJMP?fah


GOBACK:?MOV?A,#0CH??;关闭光标闪烁设置


?LCALL?LCDWCN?


?POP?ACC


JIAN_END:


?SETB?TR0?


?RET?


;1111111111111111111111111111111111111111111111111111111111111111111111111111


?;11111111111111111111111111111111111111111111111111111111111111111111111111


JPXS:?MOV?A,#85H


?LCALL?LCDWC


?MOV?R1,#08H???;第一行显示数据存储单元的启始地址


JPXS_LL:DEC?R1


?CJNE?R1,#05H,JPXS_LP


?MOV?A,#3AH


?SJMP?JPXS_LY


JPXS_LP:MOV?A,@R1???;用查表法送要显示的数据


?MOV?DPTR,#TAB2


?MOVC?A,@A+DPTR


JPXS_LY:LCALL?LCDWD


?CJNE?R1,#03H,JPXS_LL


?RET


?;111111111111111111111111111111111111111111111111111111111111111111111


?;111111111111111111111111111111111111111111111111111111111111111111111


;************************位选比较控制程序************************?


;?在调整时间时这几位是符号冒号和横杠的数据


;在这几位时跳过到下一位


JIAN:?CJNE?R4,#87H,JIAN5??


?DEC?R0


?INC?R4


?SJMP?JIANEND


JIAN5:?CJNE?R4,#8AH,JIAN1


?DEC?R0


?INC?R4


?SJMP?JIANEND


JIAN1:?CJNE?R4,#0C9H,JIAN2


?DEC?R0


?INC?R4


?SJMP?JIANEND


JIAN2:?CJNE?R4,#0CCH,JIANEND


?DEC?R0


?INC?R4


JIANEND:RET?


;************************按键加一子程序********************


JIAYI:?INC?@R0


?CJNE?@R0,#0AH,JIAYI_END


?MOV?@R0,#0


?CJNE?R4,#86H,JIAYI55


?SJMP?JIAYI33


JIAYI55:CJNE?r4,#89H,JIAYI11


?SJMP?JIAYI33


JIAYI11:CJNE?r4,#8CH,JIAYI22


?SJMP?JIAYI33


JIAYI22:CJNE?R0,#30H,JIAYI_END


JIAYI33:INC?R0


?INC?@R0


?CJNE?@R0,#06H,JIAYI44


?MOV?@R0,#0


JIAYI44:DEC?R0


??


JIAYI_END:MOV?A,#0CH??;开启光标闪烁设置


?LCALL?LCDWCN


?JNB?NZBZ,JIAYI88?;为“1”闹钟???为“0”时钟


?LCALL?JPXS


?SJMP?JIAYI99


JIAYI88:LCALL?DISPLAY??;显示子程序?


JIAYI99:?RET


?


;%%%%%%%%%%%%%%%%%%减一%%%%%%%%%%%%%%%%%%%%%%%%


JIANYI:?DEC?@R0


?CJNE?@R0,#00H,JIANYI_END


?MOV?@R0,#9


?CJNE?R4,#86H,JIANYI55


?SJMP?JIANYI33


JIANYI55:CJNE?r4,#89H,JIANYI11


?SJMP?JIANYI33


JIANYI11:CJNE?r4,#8CH,JIANYI22


?SJMP?JIANYI33


JIANYI22:CJNE?R0,#30H,JIANYI_END


JIANYI33:INC?R0


?DEC?@R0


?CJNE?@R0,#0FFH,JIANYI44


?MOV?@R0,#5


JIANYI44:DEC?R0


??


JIANYI_END:MOV?A,#0CH??;开启光标闪烁设置


?LCALL?LCDWCN


?JNB?NZBZ,JIANYI88?;为“1”闹钟???为“0”时钟


?LCALL?JPXS


?SJMP?JIANYI99


JIANYI88:?LCALL?DISPLAY??;显示子程序?


JIANYI99:?RET


?


;******************************闹钟开关部分************************?


NZBF:?JB?NZKG,NZBF_END


?LCALL?DELAY5MS


?JB?NZKG,NZBF_END


?JNB?NZKG,$


?CPL?NZBZ


?JB?NZBZ,NZBF_LL


?MOV?????A,#01H??????????;显示清屏


????????LCALL???LCDWC


????????CLR?P2.5


????????LCALL?DISPSTART?;调用显示初始状态


????????LCALL?DISPLAY??;调用显示初始状态


????????


????????JB?BSKGBZ,NZBF_LP????;?|


????????SJMP?NZBF_END????;?|


NZBF_LP:MOV?????A,#8FH??????????;报时标志显示位置?;??|


????????LCALL???LCDWC?????;??|保护报时标志在清屏是不被误清


?MOV?A,#25H??;显示报时标志??;??|


?LCALL?LCDWD??????????;?|


???????SJMP?NZBF_END????;?|


???????


???????


NZBF_LL:MOV?????A,#8EH??????????;闹钟标志显示位置


????????LCALL???LCDWC


?MOV?A,#26H??;显示闹钟标志?


?LCALL?LCDWD


?


NZBF_END:RET?


;******************************闹钟比较部分************************


NZBJ:?JB?NZBZ,NZBJ_LL


?SJMP?NZBJ_END


NZBJ_LL:MOV?A,07H


?CJNE?A,37H,NZBJ_END


?MOV?A,06H


?CJNE?A,36H,NZBJ_END


?MOV?A,04H


?CJNE?A,34H,NZBJ_END


?MOV?A,03H


?CJNE?A,33H,NZBJ_END


?SETB?P2.5


NZBJ_END:RET


;***************报时开关********************


BSKG:?JB?FANHUI,BSKG_END


?LCALL?DELAY5MS


?JB?FANHUI,BSKG_END


?JNB?FANHUI,$


?CPL?BSKGBZ


?


?


?JB?BSKGBZ,BSKG_LL


?MOV?????A,#01H??????????;显示清屏


????????LCALL???LCDWC


????????CLR?P2.6


????????LCALL?DISPSTART?;调用显示初始状态


????????LCALL?DISPLAY??;调用显示


????????


????????JB?NZBZ,BSKG_LP?;?|


????????SJMP?BSKG_END?;?|


BSKG_LP:MOV?????A,#8EH??????????;??|


????????LCALL???LCDWC??;??|保护闹钟标志在清屏是不被误清


?MOV?A,#26H??;??|


?LCALL?LCDWD??;?|?????


?SJMP?BSKG_END?;?|?


?


BSKG_LL:MOV?????A,#8FH??????????;报时标志显示位置


????????LCALL???LCDWC


?MOV?A,#25H??;显示报时标志


?LCALL?LCDWD


BSKG_END:RET


;*********************报时次数********************


BSCS:?JNB?BSKGBZ,BSCS_END


?JNB?BSCSBZ,BSCS_END


?MOV?A,37H


?CJNE?A,#01H,BSCS_LL


?MOV?A,#0AH


?SJMP?BSCS_LP


BSCS_LL:CJNE?A,#02H,BSCS_LP


?MOV?A,#14H


BSCS_LP:ADD?A,36H


?RL?A


?MOV?BSCSCC,A


?CLR?BSCSBZ


BSCS_END:?RET


;**********************闪烁报时********************************?


SSBS:?JNB?BSKGBZ,SSBS_END


?JNB?ZDBSBZ,SSBS_END


?JNB?ZMBSBZ,SSBS_END


?CPL?P2.6


?CPL?????P2.7


?CLR?ZMBSBZ


?DJNZ?BSCSCC,SSBS_END


?CLR?ZDBSBZ


?CLR?P2.6


SSBS_END:RET


;************************延时子程序(5MS)************************


DELAY5MS:


?PUSH?PSW


?SETB?RS0


?SETB?RS1


?MOV?????R1,#25??????????????;延时子程序(5MS)


DL5_PA:?MOV?????R2,#100


????????DJNZ????R2,$


????????DJNZ????R1,DL5_PA???????


????????POP?PSW


????????RET


TAB:?DB?"TIME:",00h


TAB1:?DB?"DATE:",00h


TAB2:?DB?"01234567891"


TAB3:?DB?0AH,06H,00H,0AH,06H,00H,0AH,03H?;用于比较调整时间时的比较


TAB4:?DB?0AH,04H,00H,0AH,02H,00H,0AH,0AH,0AH,0AH;用于调整日期时的比较


TAB5:?DB?00H,03H,02H,03H,03H,03H,03H,03H,03H,03H,03H,03H,03H;用于天数十位比较


TAB6:?DB?00H,02H,09H,02H,01H,02H,01H,02H,02H,01H,02H,01H,02H;用于天数个位比较


????????END


51单片机有哪几个专用寄存器?


                
1、ACC---是累加器,通常用A表示。
这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。

2、B--一个寄存器。
在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。3、PSW-----程序状态字。
这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表:
CY:进位标志。8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。有进、借位,CY=1;无进、借位,CY=0
例:78H+97H(01111000+10010111)
AC:辅助进、借位(高半字节与低半字节间的进、借位)。
例:57H+3AH(01010111+00111010) 下面我们逐一介绍各位的用途F0:用户标志位,由用户(编程人员)决定什么时候用,什么时候不用。
RS1、RS0:工作寄存器组选择位。这个我们已知了。
0V:溢出标志位。运算结果按补码运算理解。有溢出,OV=1;无溢出,OV=0。什么是溢出我们后面的章节会讲到。
P:奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,否则为0。 运算结果有奇数个1,P=1;运算结果有偶数个1,P=0。
例:某运算结果是78H(01111000),显然1的个数为偶数,所以P=0。4、P0、P1、P2、P3------这个我们已经知道,是四个并行输入/输出口的寄存器。它里面的内容对应着管脚的输出。5、IE-----中断充许寄存器
按位寻址,地址:A8H中断禁止(即不产生中断)
EA=1时,各中断的产生由个别的允许位决定
- (IE.6):保留
ET2(IE.5):定时2溢出中断充许(8052用)
ES (IE.4):串行口中断充许(ES=1充许,ES=0禁止)
ET1(IE.3):定时1中断充许
EX1(IE.2):外中断INT1中断充许
ET0(IE.1):定时器0中断充许
EX0(IE.0):外部中断INT0的中断允许
7、IP-----中断优先级控制寄存器
按位寻址,地址位B8HEA (IE.7):EA=0时,所有中断禁止(即不产生中断)
EA=1时,各中断的产生由个别的允许位决定
- (IE.6):保留
ET2(IE.5):定时2溢出中断充许(8052用)
ES (IE.4):串行口中断充许(ES=1充许,ES=0禁止)
ET1(IE.3):定时1中断充许
EX1(IE.2):外中断INT1中断充许
ET0(IE.1):定时器0中断充许
EX0(IE.0):外部中断INT0的中断允许
7、IP-----中断优先级控制寄存器
按位寻址,地址位B8H6、指针寄存器
(1)程序计数器PC
指明即将执行的下一条指令的地址,16位,寻址64KB范围,
复位时PC = 0000H
(2)堆栈指针SP
指明栈顶元素的地址,8位,可软件设置初值,复位时SP = 07H
(3)数据指针DPTR
@R0、@R1、@DPTR;指明访问的数据存储器的单元地址,16位,寻址范围64KB。 DPTR = DPH + DPL。可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用。 分成DPL(低8位)和DPH(高8位)两个寄存器。用来存放16位地址值,以便用间接寻址或变址寻址的方式对片外数据RAM或程序存储器作64K字节范围内的数据操作。7、定时/计数器
(1) 定时器方式寄存器:TMOD
(2) 定时器控制寄存器:TCON
(3) 计数寄存器:TH0、TL0;TH1、TL1。可用于设定计数初值。8052/8032增设专用寄存器
(1) 定时器2控制寄存器T2CON;控制、设置工作方式。
(2) 计数寄存器:TH2、TL2
(3) 定时器2捕获/重装载寄存器:RCAP2H、RCAP2L
存放自动重装载到TH2、TL2的数据。

与中断有关特殊功能寄存器有哪些?


                
单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有 RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在一个51单片机的内部包含了这么多的东西。
    对图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到相应I/O口的锁存器就可以了,那么对于定时/计数器,串行I/O口等怎么用呢? 在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。 1、ACC---是累加器,通常用A表示。
    这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是 在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则 Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。

2、B--一个寄存器。
    在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。3、PSW-----程序状态字。
    这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。CY:进位标志。8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。有进、借位,CY=1;无进、借位,CY=0
例:78H+97H(01111000+10010111)
AC:辅助进、借位(高半字节与低半字节间的进、借位)。
例:57H+3AH(01010111+00111010)F0:用户标志位,由用户(编程人员)决定什么时候用,什么时候不用。
RS1、RS0:工作寄存器组选择位。这个我们已知了。
0V:溢出标志位。运算结果按补码运算理解。有溢出,OV=1;无溢出,OV=0。什么是溢出我们后面的章节会讲到。
P:奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,否则为0。 运算结果有奇数个1,P=1;运算结果有偶数个1,P=0。
例:某运算结果是78H(01111000),显然1的个数为偶数,所以P=0。 EA (IE.7):EA=0时,所有中断禁止(即不产生中断)
EA=1时,各中断的产生由个别的允许位决定
- (IE.6):保留
ET2(IE.5):定时2溢出中断充许(8052用)
ES (IE.4):串行口中断充许(ES=1充许,ES=0禁止)
ET1(IE.3):定时1中断充许
EX1(IE.2):外中断INT1中断充许
ET0(IE.1):定时器0中断充许
EX0(IE.0):外部中断INT0的中断允许
7、IP-----中断优先级控制寄存器
按位寻址,地址位B8H6、指针寄存器
(1)程序计数器PC
指明即将执行的下一条指令的地址,16位,寻址64KB范围,
复位时PC = 0000H
(2)堆栈指针SP
指明栈顶元素的地址,8位,可软件设置初值,复位时SP = 07H
(3)数据指针DPTR
@R0、 @R1、@DPTR;指明访问的数据存储器的单元地址,16位,寻址范围64KB。 DPTR = DPH + DPL。可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用。 分成DPL(低8位)和DPH(高8位)两个寄存器。用来存放16位地址值,以便用间接寻址或变址寻址的方式对片外数据RAM或程序存储器作64K字节范 围内的数据操作。7、定时/计数器
(1) 定时器方式寄存器:TMOD
(2) 定时器控制寄存器:TCON
(3) 计数寄存器:TH0、TL0;TH1、TL1。可用于设定计数初值。8052/8032增设专用寄存器
(1) 定时器2控制寄存器T2CON;控制、设置工作方式。
(2) 计数寄存器:TH2、TL2
(3) 定时器2捕获/重装载寄存器:RCAP2H、RCAP2L
存放自动重装载到TH2、TL2的数据

电动车充电器3A和3AH有什么区别?


                
输出3A指的是充电器额定输出电流,3AH指的是电池容量。

电动车充电器是专门为电动自行车的电瓶配置的一个充电设备!充电器的分类: 用有、无工频(50赫兹)变压器区分,可分为两大类。货运三轮充电器一般使用带工频变压器的充电机,体积大、重量大、费电,但是可靠,便宜;电动自行车和电摩则使用所谓开关电源式充电器,省电,效率高,但是易坏。

开关电源式充电器的正确操作是:充电时,先插电池,后加市电;充足后,先切断市电,后拔电池插头。如果在充电时先拔电池插头,特别是充电电流大(红灯)时,非常容易损坏充电器。
常用的开关电源式充电器又分半桥式和单激式两大类,单激类又分为正激式和反激式两类。半桥式成本高,性能好,常用于带负脉冲的充电器;单激式成本低,市场占有率高。

220v交流电经T0双向滤波抑制干扰,D1整流为脉动直流,再经C11滤波形成稳定的300V左右的直流电。U1 为TL3842脉宽调制集成电路。其5脚为电源负极,7脚为电源正极,6脚为脉冲输出直接驱动场效应管Q1(K1358) 3脚为最大电流限制,调整R25(2.5欧姆)的阻值可以调整充电器的最大电流。 2脚为电压反馈,可以调节充电器的输出电压。4脚外接振荡电阻R1,和振荡电容C1。T1为高频脉冲变压器,其作用有三个。

第一是把高压脉冲降压为低压脉冲。
第二是起到隔离高压的作用,以防触电。
第三是为uc3842提供工作电源。D4为高频整流管(16A60V)C10为低压滤波电容,D5为12V稳压二极管, U3(TL431)为精密基准电压源,配合U2(光耦合器4N35) 起到自动调节充电器电压的作用。调整w2(微调电阻)可以细调充电器的电压。D10是电源指示灯。D6为充电指示灯。

R27是电流取样电阻(0.1欧姆,5w)改变W1的阻值可以调整充电器转浮充的拐点电流
(200-300 mA)通电开始时,C11上有300v左右电压。此电压一路经T1加载到Q1。
第二路经R5,C8,C3, 达到U1的第7脚。强迫U1启动。U1的6脚输出方波脉冲,Q1工作,电流经R25到地。同时T1副线圈产生感应电压,经D3,R12给U1提供可靠电源。T1输出线圈的电压经D4,C10整流滤波得到稳定的电压。此电压一路经D7(D7起到防止电池的电流倒灌给充电器的作用)给电池充电。

第二路经R14,D5,C9, 为LM358(双运算放大器,1脚为电源地,8脚为电源正)及其外围电路提供12V工作电源。D9为LM358提供基准电压,经R26,R4分压达到LM358的第二脚和第5脚。正常充电时,R27上端有0.15-0.18V左右电压,此电压经R17加到LM358第三脚,从1脚送出高电压。此电压一路经R18,强迫Q2导通,D6(红灯)点亮,第二路注入LM358的6脚,7脚输出低电压,迫使Q3关断,D10(绿灯)熄灭,充电器进入恒流充电阶段。当电池电压上升到44.2V左右时,充电器进入恒压充电阶段,输出电压维持在44.2V左右,充电器进入恒压充电阶段,电流逐渐减小。当充电电流减小到200mA—300mA时,R27上端的电压下降,LM358的3脚电压低于2脚,1脚输出低电压,Q2关断,D6熄灭。同时7脚输出高电压,此电压一路使Q3导通,D10点亮。另一路经D8,W1到达反馈电路,使电压降低。充电器进入涓流充电阶段。1-2小时后充电结束。

目录[+]