深圳市华胄科技有限公司 >> MCU专题 >> MCU单片机


MCU51学习例程----开机计数器



提交者 华胄斑竹  在  2008-6-23 14:13:29 

上一篇 下一篇
;=================================================
; 24c02的开机计数器,系统复位一次数码管加1
; 按SW1 复位
; 24c02 储存计数器程序、断电数据保持、
; 每次开机数码管显示加 1
;=================================================
;
; mcu51实验板配套学习例程
;
;=================================================


LED1 EQU 08H
LED2 EQU 09H
LED3 EQU 0AH
LED4 EQU 0BH


LedT0 EQU 0CH ;0-3 轮流点亮4个数据管


SDA EQU P2.0
SCL EQU P2.1
Address EQU 0EH
I2CData EQU 0FH
;=================================================
ORG 0000H
LJMP START;转入主程序


;=================================================
ORG 000BH
;定时器0中断入口
INT_TO:
PUSH ACC
PUSH PSW


CLR TF0 ;清定时0中断标志
MOV TH0,#0F6H ;2.5MS
MOV TL0,#03DH ;


MOV A,#11110000B ;关数码管
ORL P2,A


MOV A,LedT0
CJNE A,#0,INT_T0_1
MOV A,LED1
MOVC A,@A+DPTR
MOV P0,A
CLR P2.7
MOV LedT0,#1
LJMP INT_T0_END
INT_T0_1:

MOV A,LedT0
CJNE A,#1,INT_T0_2
MOV A,LED2
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6
MOV LedT0,#2
LJMP INT_T0_END
INT_T0_2:

MOV A,LedT0
CJNE A,#2,INT_T0_3
MOV A,LED3
MOVC A,@A+DPTR
MOV P0,A
CLR P2.5
MOV LedT0,#3
LJMP INT_T0_END
INT_T0_3:

MOV A,LED4
MOVC A,@A+DPTR
MOV P0,A
CLR P2.4
MOV LedT0,#0
LJMP INT_T0_END

INT_T0_END:


POP PSW
POP ACC


RETI


;=============================================


START:
MOV SP,#60H


CALL DELAY10MS
CALL DELAY10MS
CALL DELAY10MS


CALL AT24C01_READ_ALL


MOV A,LED1
CJNE A,#10,$+3 ;A<10 ,C=1
JNC START_RESET_24C01
MOV A,LED2
CJNE A,#10,$+3 ;A<10 ,C=1
JNC START_RESET_24C01
MOV A,LED3
CJNE A,#10,$+3 ;A<10 ,C=1
JNC START_RESET_24C01
MOV A,LED4
CJNE A,#10,$+3 ;A<10 ,C=1
JNC START_RESET_24C01
JMP START_INC
;第一次使用复位内部数值
START_RESET_24C01:
MOV LED1,#0
MOV LED2,#0
MOV LED3,#0
MOV LED4,#0
JMP START_INC_END
;加1
START_INC:
INC LED4
MOV A,LED4
CJNE A,#10,START_INC_END ;等于10,进位
MOV LED4,#00
INC LED3
MOV A,LED3
CJNE A,#10,START_INC_END
MOV LED3,#00
INC LED2
MOV A,LED2
CJNE A,#10,START_INC_END
MOV LED2,#00
INC LED1
MOV A,LED1
CJNE A,#10,START_INC_END
MOV LED1,#00
MOV LED2,#00
MOV LED3,#00
MOV LED4,#00


START_INC_END:
;储存
CALL AT24C01_WRITE_ALL


MOV TMOD,#01H ;设定T0为十六位定时模式。
MOV TH0,#0F6H ;2MS
MOV TL0,#03DH ;
SETB TR0 ;开定时器0
SETB ET0 ;致能定时0中断
CLR TF0 ;清定时0中断标志
SETB EA ;开总中断


MOV LedT0,#00H
MOV DPTR,#TABLE


;=============================================
SCAN:


;按键扫描
JB P3.2,$
LCALL DELAY10MS ;去抖动
JNB P3.2,KEY_RESET
LJMP SCAN
;=============================================
KEY_RESET:
MOV LED1,#00
MOV LED2,#00
MOV LED3,#00
MOV LED4,#00


;储存
CALL AT24C01_WRITE_ALL
;检测按键是否放开
JNB P3.2,$
JMP SCAN


DELAY10MS:
MOV R4,#20
DELAY10MSA:
MOV R5,#247
DJNZ R5,$
DJNZ R4,DELAY10MSA
RET


TABLE:
DB 00101000B ;0
DB 11101011B ;1
DB 00110010B ;2
DB 10100010B ;3
DB 11100001B ;4
DB 10100100B ;5
DB 00100100B ;6
DB 11101010B ;7
DB 00100000B ;8
DB 10100000B ;9
DB 01100000B ;A
DB 00100101B ;b
DB 00111100B ;C
DB 00100011B ;d
DB 00110100B ;E
DB 01110100B ;F
DB 11110111B ;-
DB 11111111B ;
;====================================================
;读出全部数据
AT24C01_READ_ALL:
MOV Address,#00H
CALL I2C_READ
MOV LED1,A ;读出数据
MOV Address,#01H
CALL I2C_READ
MOV LED2,A ;读出数据
MOV Address,#02H
CALL I2C_READ
MOV LED3,A ;读出数据
MOV Address,#03H
CALL I2C_READ
MOV LED4,A ;读出数据
RET
;====================================================
;写入全部数据
AT24C01_WRITE_ALL:
MOV Address,#00H
MOV A,LED1
MOV I2CData,A
CALL I2C_WRITE ;写入数据
MOV Address,#01H
MOV A,LED2
MOV I2CData,A
CALL I2C_WRITE ;写入数据
MOV Address,#02H
MOV A,LED3
MOV I2CData,A
CALL I2C_WRITE ;写入数据
MOV Address,#03H
MOV A,LED4
MOV I2CData,A
CALL I2C_WRITE ;写入数据
RET
;====================================================
;写一个字节 Address地址 I2CDatata写入的数据
;====================================================
I2C_WRITE:
I2C_WRITE_A:
LCALL I2C_START
MOV A,#10100000B
LCALL I2C_SEND8BIT
LCALL I2C_ACK
JC I2C_WRITE_A ;=1,表示无确认,再次发送

MOV A,Address
LCALL I2C_SEND8BIT
LCALL I2C_ACK


MOV A,I2CData
LCALL I2C_SEND8BIT
LCALL I2C_ACK
LCALL I2C_STOP
RET


;====================================================
;读一个字节 Address地址 Data读出的数据
;====================================================


I2C_READ:
I2C_READ_A:
LCALL I2C_START
MOV A,#10100000B
LCALL I2C_SEND8BIT
LCALL I2C_ACK
JC I2C_READ_A ;=1,表示无确认,再次发送


MOV A,Address
LCALL I2C_SEND8BIT
LCALL I2C_ACK


I2C_READ_B:
LCALL I2C_START
MOV A,#10100001B
LCALL I2C_SEND8BIT
LCALL I2C_ACK
JC I2C_READ_B


LCALL I2C_RECEIVE8BIT
MOV I2CData,A
LCALL I2C_ACK
LCALL I2C_STOP
RET


;发送开始信号
I2C_START:
SETB SCL
SETB SDA
NOP
NOP
CLR SDA
NOP
NOP
CLR SCL
RET
;发送结束信号
I2C_STOP:
CLR SDA
NOP
NOP
SETB SCL
NOP
NOP
SETB SDA
RET


;发送接收确认信号
I2C_ACk:
SETB SDA
SETB SCL
NOP
NOP
JB SDA,I2C_ACK0
CLR C
SJMP I2C_ACK_END
I2C_ACK0:
SETB C
I2C_ACK_END:
CLR SCL
RET


;送八位数据
I2C_SEND8BIT:
MOV B,#08H
I2C_SEND8BIT_A:
RLC A

MOV SDA,C
SETB SCL
NOP
NOP
CLR SCL
DJNZ B,I2C_SEND8BIT_A
RET


;接收八位数据
I2C_RECEIVE8BIT:
MOV B,#08H
CLR A
SETB SDA
I2C_RECEIVE8IT_A:
SETB SCL
NOP
NOP
MOV C,SDA
RLC A
CLR SCL
DJNZ B,I2C_RECEIVE8IT_A


RET
END



单片机教程,五系列(55讲)电子书全集下载

论坛精选:
单片机教程,MCS51单片机从零开始 第一讲:初识单片机
http://bbs.huazhoucn.com/Topic.aspx?id=2539
单片机教程,MCS51单片机从零开始 第二讲:MCS-51单片机简述
http://bbs.huazhoucn.com/Topic.aspx?id=2540
单片机教程,MCS51单片机从零开始 第三讲:单片机相关常用名词解释
http://bbs.huazhoucn.com/Topic.aspx?id=2541
单片机教程,MCS51单片机从零开始 第四讲:计算机中数的表示及运算
http://bbs.huazhoucn.com/Topic.aspx?id=2542
单片机教程,MCS51单片机从零开始 第五讲:常用逻辑电路
http://bbs.huazhoucn.com/Topic.aspx?id=2544
单片机教程,MCS51单片机从零开始 第六讲:51单片机的结构及其组成
http://bbs.huazhoucn.com/Topic.aspx?id=2545
单片机教程,MCS51单片机从零开始 第七讲:51单片机的引脚
http://bbs.huazhoucn.com/Topic.aspx?id=2546
单片机教程,MCS51单片机从零开始 第八讲:8051单片机I/O引脚工作原理
http://bbs.huazhoucn.com/Topic.aspx?id=2547
单片机教程,MCS51单片机从零开始 第九讲:8051单片机的存储器结构
http://bbs.huazhoucn.com/Topic.aspx?id=2548
单片机教程,MCS51单片机从零开始 第十讲:编码及译码器工作原理
http://bbs.huazhoucn.com/Topic.aspx?id=2549
单片机教程,MCS51单片机从零开始 第十一讲:存储器的存储原理
http://bbs.huazhoucn.com/Topic.aspx?id=2550
单片机教程,MCS51单片机从零开始 第十二讲:51单片机的特殊功能寄存器
http://bbs.huazhoucn.com/Topic.aspx?id=2551
单片机教程,MCS51单片机从零开始 第十三讲:51单片机CPU的内部结构
http://bbs.huazhoucn.com/Topic.aspx?id=2552
单片机教程,MCS51单片机从零开始 第十四讲:定时器/计数器的基本结构及工作原理
http://bbs.huazhoucn.com/Topic.aspx?id=2553
单片机教程,MCS51单片机从零开始 第十五讲:51单片机的中断系统
http://bbs.huazhoucn.com/Topic.aspx?id=2554
单片机教程,MCS51单片机从零开始 第十六讲:51单片机的复位
http://bbs.huazhoucn.com/Topic.aspx?id=2555
单片机教程,MCS51单片机从零开始 第十七讲:51单片机执行指令的过程
http://bbs.huazhoucn.com/Topic.aspx?id=2556
单片机教程,MCS51单片机从零开始 第十八讲:51单片机的延时及时序分析
http://bbs.huazhoucn.com/Topic.aspx?id=2557
单片机教程,MCS51单片机从零开始 第十九讲:汇编语言基础
http://bbs.huazhoucn.com/Topic.aspx?id=2558
单片机教程,MCS51单片机从零开始 第二十讲:汇编语言及汇编过程
http://bbs.huazhoucn.com/Topic.aspx?id=2556
单片机教程,MCS51单片机从零开始 第二十一讲:汇编程序的基本结构
http://bbs.huazhoucn.com/Topic.aspx?id=2560
单片机教程,MCS51单片机从零开始 第二十二讲:51单片机的寻址方式
http://bbs.huazhoucn.com/Topic.aspx?id=2561
单片机教程,MCS51单片机从零开始 第二十三讲:数据传送类指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2562
单片机教程,MCS51单片机从零开始 第二十四讲:算术运算类指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2563
单片机教程,MCS51单片机从零开始 第二十五讲:逻辑运算及移位指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2564
单片机教程,MCS51单片机从零开始 第二十六讲:控制转移类指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2565
单片机教程,MCS51单片机从零开始 第二十七讲:布尔变量操作指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2566
单片机教程,MCS51单片机从零开始 第二十八讲:伪指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2567

1 楼  提交者:Guest 在 2008-6-23 16:57:10
看下 学习 学习!
2 楼  提交者:Guest 在 2008-7-17 9:22:20
haojiahuo
3 楼  提交者:Guest 在 2008-7-21 15:31:56
4 楼  提交者:Guest 在 2008-7-22 11:03:05
ddddddddddddddddddddddd
5 楼  提交者:Guest 在 2008-7-22 23:15:22
6 楼  提交者:Guest 在 2008-7-23 11:47:30
5555555
7 楼  提交者:Guest 在 2008-7-23 17:59:37
HAO 
8 楼  提交者:xjl 在 2008-7-31 13:36:12
9 楼  提交者:Guest 在 2008-12-2 13:17:24
直达车
10 楼  提交者:Guest 在 2008-12-6 15:55:17
11 楼  提交者:rxdz888 在 2008-12-25 22:01:46
看下 学习 学习!
12 楼  提交者:Guest 在 2009-3-28 15:45:55
很好!




13 楼  提交者:rocy 在 2009-4-11 15:13:03
haoaho
14 楼  提交者:Guest 在 2009-4-13 22:51:38
hi!
15 楼  提交者:Guest 在 2009-4-20 13:31:01
16 楼  提交者:懒赖猫 在 2009-5-4 15:51:40
17 楼  提交者:2222h 在 2009-5-27 14:34:16
18 楼  提交者:沈丁丁 在 2009-5-31 9:15:46
19 楼  提交者:Guest 在 2009-6-14 1:04:34
bngngngfngfngf
上一篇 下一篇
当前第〖1〗页