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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

6數碼管頻率計匯編程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:34607 發表于 2016-11-27 13:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
6數碼管頻率計匯編程序注意:電路圖中,6個位驅動三極管型號是3CG,NPN型,P2口相應位輸出低電平點亮.

;/***************************************************************************
;標題:51頻率計.asm        20161127
;說明:通過對信號在1s內的脈沖計數值求得頻率,并通過數碼管顯示結果
;      T0用于頻率計數,T1用于1秒定時
;工作于:6數碼管板
;作者:LRY
;日期:2016年11月20日
;備注:使用12M晶振,頻率量程<1000000Hz
;******************************************************************************/  

T1_COUNT          EQU   48H    ;時間中斷數地址  

inm                equ                43h                ;T0計數中斷數存儲地址
inh                equ                41h
inl                equ                42h

T0_COUNT          EQU   49H                ;T0計數中斷數地址
KK                        EQU          40H        ;數據緩存地址

dm4        equ        36h
dm3        equ        37h
dm2        equ        38h
dm1        equ        39h
dm0        equ        3ah

;數據存放  
ORG 0100H
TABLE: DB 0C0h,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H,88h,83h,0c6h,0a1h,86h,8eh     ;共陽數碼管 0-f

ORG 0000H  
        LJMP START
ORG 001BH                                 ;T1中斷001BH
        JMP T1_interrupt         
ORG 000BH                                 ;T0中斷000BH
        JMP T0_interrupt
ORG 0200H
;-------------------------------------------------------------
;主程序
;-------------------------------------------------------------  
START:

        MOV KK,#255
        SETB F0        ;
        LCALL PRO_init  ;程序初始化            
    LCALL TIM_set   ;定時器設置
LOOP:   
        JB  F0  ,LOOP1        ;1秒到,清F0才執行下面行
        LCALL HEX2BCD_      
    LCALL DISPLAY              
LOOP1:
    JMP LOOP

;---------------------------------------------------------
;初始化程序
;---------------------------------------------------------  
PRO_init:        
        MOV A,#00H        ;A清0
        MOV B,#00H        ;B清0
        MOV P0,#0FFH                ;P0拉高,關段顯示
    MOV P1,#0FFH        
        MOV P2,#0ffH      ;P2拉高,關位顯示  
    MOV T1_COUNT,#00H        ;T1定時中斷數初始化
    MOV T0_COUNT,#00H        ;T0計數中斷數初始化
    SETB  P3.4             ;P3.4端口(T0)置輸入狀態
RET

;--------------------------------------------------------
;定時/計數器設置
;T0,T1均工作于方式1,T1用于定時,T0用于脈沖計數
;--------------------------------------------------------
TIM_set:
     MOV TMOD,#15H                ;T0定時,T1計數,模式設置
    MOV TH1,#3CH      ;定時 50 MS,初值
    MOV TL1,#0B0H         
     MOV  TH0,#00H                 ;清T0計數器
     MOV  TL0,#00H
     MOV  IE,#8AH                  ;開總中斷,開T0中斷、T1中斷
     SETB  TR1                            ;計數器T1開始工作
     SETB  TR0                     ;計數器T0開始工作
RET

HEX2BCD_ :
;把TH0 TL0的數值轉成十進制, 分別存入R4(高位) R3 R2 R1 R0。
  mov r1,inl
  mov r0,inh
;------------------------------------------------------------------
     CALL HEX2BCD      ;調用子程序把R0 R1中的數字,轉換成BCD碼,送到R2 R3 R4
;-------下面,把萬千百十個位,分別存入R4 R3 R2 R1 R0
     MOV A,   R4
     MOV B,   #16
     DIV AB                ;除以16,目的是分離出高、低四位
     MOV R1, A            ;存放十位
     MOV R0, B            ;存放個位
     MOV A,   R2
     MOV R4, A            ;存放萬位
     MOV A,   R3
     MOV B,   #16
     DIV AB
     MOV R3, A
     MOV R2, B
  mov dm4,r4
  mov dm3,r3  
  mov dm2,r2         
  mov dm1,r1
  mov dm0,r0

  RET              

;------------------------------------------------------------------
;兩個字節的二進制數轉換成BCD碼的程序如下:
;功能:16位二進制數變換成為 BCD 碼;
;入口:R0 R1 中是 16 位二進制數,其中R0中是高 8 位;
;出口:R2 R3 R4 中是 BCD 碼,其中R2中是萬位,R3中是千、百位,R4中是十、個位。
HEX2BCD:
     CLR A
     MOV R2, A            ;先清零
     MOV R3, A
     MOV R4, A
     MOV R5, #16          ;共轉換十六位數
LOOP2:
     CLR C
     MOV A,   R1           ;從待轉換數的高端移出一位到Cy
     RLC A
     MOV R1, A
     MOV A,   R0
     RLC A
     MOV R0, A
     MOV A,   R4           ;送到BCD碼的低端
     ADDC A,   R4           ;帶進位加。自身相加,相當于左移一位
     DA   A                 ;十進制調整,變成BCD碼
     MOV R4, A
     MOV A,   R3
     ADDC A,   R3
     DA   A
     MOV R3, A
     MOV A,   R2
     ADDC A,   R2
     MOV R2, A
     DJNZ R5, LOOP2         ;共轉換十六位數
RET
;------------------------------------------------------------------

;--------------------------------------------------
;T0計數中斷
T0_interrupt:
        CLR TF0       
  INC T0_COUNT          ;T0計數中斷數加1
RETI

;-------------------------------------------------------
;定時器1中斷服務程序:T1用于定時,1秒到,關T1、關T0(用于計數),
;        取出計數值;
;-------------------------------------------------------
T1_interrupt:
        CLR TF1       
      MOV TL1,#0B0H       ;重新賦初值
      MOV TH1,#3CH      
      INC T1_COUNT          ;T1定時中斷數加1,1S,時間單位
      MOV A,T1_COUNT        ;查看數量值
      CJNE A,#20,T_END      ;如果沒有到1S返回
;1秒到,
      CLR  TR1                         ;關閉T1
      CLR  TR0                    ;關T0
      MOV T1_COUNT,#00H     ;到1S則清零
      MOV inl,TL0         ;取出計數值
      MOV inh,TH0
          MOV A,T0_COUNT                ;保存T0中斷數
          MOV inm,A
      MOV  TH0,#00H             ;清空T0數據
      MOV  TL0,#00H
      MOV  T0_COUNT,#00H          
        MOV KK,#255                ;顯示掃描次數
        CLR F0                ;計數之后,轉換數據、顯示
T_END:
RETI  

;-------------------------------------------------------
;數碼管顯示子程序
;顯示數據入口:段碼數據:R5百千位,R4、R3、R2、R1、R0;
;顯示數據出口:段碼:P0口;位碼:P2口
;-------------------------------------------------------
DISPLAY:
    MOV DPTR,#TABLE
loop3:
        MOV A,inm                ;百千位數據送A
          MOVC A,@A+DPTR  ;獲得段碼
        MOV P0,A                ;輸出段碼
           CLR P2^0        ;十千位數碼管陽極控制腳,低電平亮
           LCALL DELAY                ;亮一會
           setb P2^0                 ;關位碼輸出





        MOV A,dm4                ;十千位數據送A
          MOVC A,@A+DPTR  ;獲得段碼
        MOV P0,A                ;輸出段碼
           CLR P2^1        ;十千位數碼管陽極控制腳,低電平亮
           LCALL DELAY                ;亮一會
           setb P2^1                 ;關位碼輸出

        MOV A,dm3                ;千位數據送A
          MOVC A,@A+DPTR  ;獲得段碼
        MOV P0,A                ;輸出段碼
           clr P2^2     
           LCALL DELAY
          setb P2^2

    MOV A,dm2
          MOVC A,@A+DPTR
    MOV P0,A
           clr P2^3     
           LCALL DELAY
          setb P2^3  

    MOV A,dm1
          MOVC A,@A+DPTR
    MOV P0,A
           clr P2^4            ;十位數碼管
           LCALL DELAY
        setb P2^4  

        MOV A,dm0
        MOVC A,@A+DPTR
    MOV P0,A
        clr P2^5              ;個位數碼管
        LCALL DELAY
        setb P2^5   

  djnz kk, loop3        ;循環掃描
  clr inm
  setb tr0
  setb tr1
  setb f0
RET

;-------------------------------------------------------
;延時子程序
;-------------------------------------------------------   
DELAY:                        ;1MS@12.000MHz
        PUSH 30H
        PUSH 31H
        MOV 30H,#2
        MOV 31H,#234
NEXT:
        DJNZ 31H,NEXT
        DJNZ 30H,NEXT
        POP 31H
        POP 30H
RET

END
;161125:單片機運行結果:
;1、無信號顯示6個0
;2、計數、顯示分時進行;
;3、音頻、超聲頻段可用,最高到65KHz,最高位是16進制碼;
;4、如最高位顯示1,則頻率=(最高位)*65536+后5位頻率數



;


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲黄色一级 | 老司机午夜性大片 | 岛国精品| 久久av网站 | 成在线人视频免费视频 | 在线观看中文字幕亚洲 | www.99re | 亚洲国产精品福利 | 黄色av网站在线免费观看 | 在线一区视频 | 久草在线影 | 日韩黄| 国内精品一区二区三区 | 国产精品久久av | 97精品超碰一区二区三区 | 天天操天天射综合网 | 91亚洲国产成人精品一区二三 | 在线视频 欧美日韩 | 三区在线观看 | www日日日| 欧美激情网站 | 精品日韩在线观看 | 日韩不卡一二区 | 欧美国产中文 | 久久中文字幕一区 | 黄色激情毛片 | 一级黄色录像片子 | 亚洲成人精品视频 | 久久99久久99久久 | 国产福利小视频 | 免费精品视频在线观看 | 国产精品国产成人国产三级 | 欧美精品一二三 | 久久三区 | 男人久久天堂 | 日韩久久久久久久 | 国产一级片在线观看视频 | 日韩国产三区 | 久草热线 | 亚洲一区二区三区 | 天天操操操操操 |