久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7080|回復: 3
打印 上一主題 下一主題
收起左側

匯編語言,精簡時鐘

[復制鏈接]
跳轉到指定樓層
樓主
ID:3271 發表于 2010-3-1 19:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

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

;簡易時鐘,匯編程序(匯編精度高)
;作者:黃新建(從事機器的銷售,參與控制板的開發與生產)
;2010年1月分

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

;--------------------ACC-------------------
A7     BIT    0E7H
A6     BIT    0E6H
A5     BIT    0E5H
A4     BIT    0E4H
A3     BIT    0E3H
A2     BIT    0E2H
A1     BIT    0E1H
A0     BIT    0E0H
;--------------------ACC-------------------
Buffer EQU    R7
;-----AT24C02----------------------------
WriteAddress    equ    0A0H
ReadAddress     equ    0A1H

IIC_SCK         EQU    P2.1
IIC_SDA         EQU    P2.0
;----------------------------------------

;-----LEDs-------------------------------
S1    EQU    P0.2
S2    EQU    P0.3
S3    EQU    P0.4
S4    EQU    P0.5
;----------------------------------------


;------------------LED-------------------
LED   EQU    P1.0
LED2  EQU    P1.1
;----------------------------------------


;-----74HC164----------------------------
SCK_164    EQU    P0.1
DAT_164    EQU    P0.0
;----------------------------------------


;-----KEY--------------------------------
KeyHour    EQU    P2.4
KeyMin     EQU    P2.5
KeyEnter   EQU    P2.2
KeyExit    EQU    P2.3

;--------------Time---------------------
D1         EQU    30H;----------Time
Hour       EQU    31H
Min        EQU    32H
D2         EQU    33H
timer      EQU    34H
ClockHour  EQU    35H;----------Clock
ClockMin   EQU    36H
HourAddr   EQU    0
MinAddr    EQU    1
;----------------------------------------

ORG    0000H
 LJMP   Main
ORG    0003H
 RETI
ORG 000BH
    LJMP Timer0Interrupt
 
;======================MAIN==================================
Main:
 MOV    SP,#60H
 acall  INIT
 acall  InitTimer0
 MOV    timer,#0
 MOV    D1,#0
 MOV    Min,#0
 MOV    Hour,#12

 MOV    Buffer,#HourAddr;Read Hour Data
 ACALL  AT24C02_Read
 MOV    ClockHour,Buffer

 MOV    Buffer,#MinAddr;Read Min Data
 ACALL  AT24C02_Read
 MOV    ClockMin,Buffer
while:

MainL1:
 ACALL  Display;display(Hour,Min)
 ACALL  KeyDispose
 MOV    a,timer
 CJNE   a,#10,MainL2;if  timer>=500us  D1++;
MainL2:
 JC     MainL3;如果C=1 說明a<10 如果a>=10 c=0
 MOV    timer,#0
 CPL    LED
 INC    D1
 mov    a,D1
 cjne   a,#120,MainL3;if D1>60s  Min++;
 MOV    D1,#0
 inc    Min
 mov    a,Min
 CJNE   a,#60,MainL3 ;if Min>=60  Min=0; Hour++
 mov    Min,#0       ;
 inc    Hour;        ;
 mov    a,Hour
 cjne   a,#24,MainL3 ;if Hour>=24 Hour=0;
 mov    Hour,#0      ;
                     ;
MainL3:                 ;
 
 LJMP   while
;=====================MAINEnd=================================

;=====================KeySet==================================
KeyDispose:
 SETB   KeyHour
 SETB   KeyMin
 jb     KeyHour,KeyDisposeL1
 ACALL  KeyDelay
 jb     KeyHour,KeyDisposeL1
 INC    Hour
 MOV    a,Hour
 CJNE   a,#24,KeyDisposeL1
 MOV    Hour,#0
KeyDisposeL1:
 JB     KeyMin,KeyDisposeL2
 ACALL  KeyDelay
 JB     KeyMin,KeyDisposeL2
 INC    Min
 MOV    a,Min
 CJNE   a,#60,KeyDisposeL2
 MOV    Min,#0
KeyDisposeL2:
 RET

KeyDelay:
 MOV    50H,#20
KeyDelayL1:
 ACALL  Display
 DJNZ   50H,KeyDelayL1
 RET

;=====================KeyEnd==================================

;=====================TimeDisplay==============================
Display:

 mov    DPTR,#LED_TAB;裝入數據
 mov    a,Hour;1
 mov    b,#10
 div    ab
 mov    r1,b
 movc   a,@a+DPTR
 mov    r7,a
 acall  HC164_Send
 clr    S4
 mov    r7,#1
 acall  Delay_nMs
 setb   S4;------------------
 mov    a,r1
 movc   a,@a+DPTR
 xrl    a,#40H
 mov    r7,a
 acall  HC164_Send
 clr    S3
 mov    r7,#1
 acall  Delay_nMs
 setb   S3;==================
 mov    a,Min;2
 mov    b,#10
 div    ab
 mov    r1,b
 movc   a,@a+DPTR
 mov    r7,a
 acall  HC164_Send
 clr    S2
 mov    r7,#1
 acall  Delay_nMs
 setb   S2;-----------------
 mov    a,r1
 movc   a,@a+DPTR
 mov    r7,a
 acall  HC164_Send
 clr    S1
 mov    r7,#1
 acall  Delay_nMs
 setb   S1

RET
;========================DisplayEnd===========================


;========================AT24C02==============================

 

AT24C02_Write:
 mov    a,r7              ;addr
 mov    50H,a
 mov    a,r6              ;data
 mov    51H,a
 acall  IIC_Start         ;開始
 mov    r7,#WriteAddress
 acall  IIC_Write         ;寫指令
 mov    r7,50H
 acall  IIC_Write         ;寫地址
 mov    r7,51H
 acall  IIC_Write         ;寫數據
 acall  IIC_Stop          ;停止
 mov    r7,#10
 acall  Delay_nMs         ;delay10ms
RET
;--------------------
AT24C02_Read:
 mov    a,r7
 mov    50H,a

 acall  IIC_Start         ;開始

 mov    r7,#WriteAddress  ;寫指令
 acall  IIC_Write

 mov    r7,50H            ;寫地址
 acall  IIC_Write

 acall  IIC_Start         ;重新開始

 mov    r7,#ReadAddress
 acall  IIC_Write         ;讀指令

 acall  IIC_Read          ;讀出數據(R7)
 acall  IIC_NoAck         ;讀完成
 acall  IIC_Stop          ;停止

 RET
;--------------------
IIC_Write:
 mov    A,r7
 mov    r4,#8
IIC_WriteL1:
 CLR    IIC_SDA
    clr    C;c->A0
 RLC    A;A7->C
 jnc     IIC_WriteL2 ;if(A7==1) sda=1
 setb   IIC_SDA
IIC_WriteL2:
    SETB   IIC_SCK
 acall   Delay5Us
 clr    IIC_SCK
 djnz   r4,IIC_WriteL1

 setb   IIC_SDA;test Ack

 acall  Delay5Us
 acall  Delay5Us
 setb   IIC_SCK
 acall  Delay5Us
 clr    IIC_SCK
 RET
;--------------------
IIC_Read:
 mov    r4,#8
 SETB   IIC_SDA
IIC_ReadL1:
 SETB   IIC_SCK;clk=1
 nop
 nop
 clr    c
 jnb    IIC_SDA,IIC_ReadL2;if(sda==1) c=1
 setb   c
IIC_ReadL2:
 rlc    a
 clr    IIC_SCK;clk=0
 djnz   r4,IIC_ReadL1

 mov    r7,a;return r7
 RET
;--------------------
IIC_Start:
 setb    IIC_SDA;sda=1
 acall   Delay5Us
 setb    IIC_SCK;clk=1
 acall   Delay5Us
 clr     IIC_SDA;sda=0
 acall   Delay5Us
 clr     IIC_SCK;clk=0
 acall   Delay5Us
 RET
;--------------------
IIC_Stop:
 clr     IIC_SDA;sda=0
 acall   Delay5Us
 setb    IIC_SCK;clk=1
 acall   Delay5Us
 setb    IIC_SDA;sda=1
 acall   Delay5Us
 clr     IIC_SCK;clk=0
 acall   Delay5Us
 RET
;--------------------
IIC_NoAck:
 setb    IIC_SDA;sda=1
 acall   Delay5Us
 setb    IIC_SCK;clk=1
 acall   Delay5Us;
 clr     IIC_SCK;clk=0
 acall   Delay5Us
 RET
;--------------------
Delay5Us:
 nop;1us+call(2us)+ret(2us)=5us
 RET
;========================AT24C02End===========================

;========================74HC164===============================
HC164_Send:
 MOV R4,#8
HC164L1:
 mov    a,#80H
 ANL    a,r7
 JB     A7,HC164L2
 CLR    DAT_164
 AJMP   HC164L3

HC164L2:
    SETB    DAT_164

HC164L3:

 SETB    SCK_164
 MOV     A,R7
 CLR     C
 
 RLC    A
 MOV    R7,A
 CLR    SCK_164

 DJNZ R4,HC164L1
RET
;======================74HC164End================================

 

;=========================Delay================================
Delay_nUs:
 djnz   r7,Delay_nUs
RET

Delay_nMs:
 mov    r4,#250
 djnz   r4,$
 mov    r4,#250
 djnz   r4,$

 djnz   r7,Delay_nMs
RET

Delay_nS:
 mov    r4,#8
DelayNsL2:
 mov    r3,#250
DelayNsL1:
 mov    r2,#250
 djnz   r2,$
 djnz   r3,DelayNsL1
 djnz   r4,DelayNsL2
 djnz r7,Delay_nS
RET
;=========================DelayEnd=============================

INIT:
 mov    P0,#0FFH
 mov    P1,#0FFH
 mov    P2,#0FFH
 mov    P3,#0FFH
 SETB   EA ;打開CPU總中斷請求
  SETB   IT0 ;設定INT0的觸發方式為脈沖負邊沿觸發
  SETB   EX0 ;打開INT0中斷請求
RET

InitTimer0:
    MOV TMOD,#01H
    MOV TH0,#3CH
    MOV TL0,#0C5H
    SETB EA
    SETB ET0
    SETB TR0
    RET

Timer0Interrupt:;2us
    PUSH DPH    ;2us
    PUSH DPL    ;2us
    PUSH ACC    ;2us
    MOV TH0,#3CH;2us
    MOV TL0,#0BCH;2us   -12us
    ;========================
    INC    timer ;
    ;========================
    POP ACC      ;
    POP DPL      ;
    POP DPH      ;
    RETI         ;

LED_TAB:
      DB        0B7H;0
      DB        084H;1
      DB        03DH;2
      DB        0ADH;3
      DB        08EH;4
      DB        0ABH;5
      DB        0BBH;6
      DB        085H;7
      DB        0BFH;8
      DB        0AFH;9

END

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:21896 發表于 2010-3-3 22:05 | 只看該作者

好例子!

回復

使用道具 舉報

板凳
ID:5944 發表于 2010-3-5 16:57 | 只看該作者
學習中!
回復

使用道具 舉報

地板
ID:26193 發表于 2010-10-2 23:23 | 只看該作者

學習了,謝謝了

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一二三区电影 | 亚洲精品免费视频 | 亚洲精品片 | 国产免费让你躁在线视频 | 人人色视频 | 91免费小视频 | 午夜精品一区二区三区在线观看 | 在线观看亚 | 国产99久久精品一区二区永久免费 | 成人毛片视频免费 | 狠狠躁躁夜夜躁波多野结依 | 国产亚洲精品久久久久动 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 日韩精品免费在线 | 91免费高清| 日韩www| 午夜视频在线 | 国产欧美一区二区三区在线看 | 亚洲免费在线 | 亚洲一区二区免费看 | 日韩欧美国产一区二区三区 | 亚洲成人三级 | 精品91视频 | 成人在线观看免费 | 男女网站在线观看 | 午夜视频网站 | 国产精品免费一区二区三区 | 日韩精品一区二区三区中文字幕 | 色婷婷亚洲 | 午夜婷婷激情 | 亚洲精品一区二区三区 | 精品日韩 | 亚洲日本一区二区三区四区 | 99久久婷婷国产综合精品电影 | 男女羞羞视频免费看 | 日韩成人久久 | 欧美午夜精品理论片a级按摩 | 手机三级电影 | av网站免费观看 | 日韩一区中文字幕 | 国产精品欧美一区二区三区不卡 |