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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3743|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区二区不卡 | 91影院在线观看 | 国产ts一区| 国产福利久久 | 天天操网| 亚洲午夜一区二区 | 在线观看国产www | 欧美亚洲成人网 | 黄在线免费观看 | 亚洲免费影院 | av在线成人 | 超碰日本 | 久久久久国产一级毛片 | 久在线视频 | 91精品国产91久久久久久吃药 | 网站黄色在线免费观看 | av黄色免费| 插插宗合网| 日韩中文一区二区三区 | 一区二区视频 | 国产一区二区三区 | 欧美精品一区二区三区四区五区 | 亚洲高清在线视频 | 久久三区 | 免费一区在线 | 亚洲性网| 一区二区三区国产 | 国产精品激情 | 欧美一级大片 | 亚州精品天堂中文字幕 | 成人字幕网zmw | 色婷婷久久 | 精品91av| 中文字幕精品视频在线观看 | 日韩久草 | 一区二区三区在线播放 | 97久久超碰| 欧美日韩亚洲系列 | 91一区二区 | 亚洲久久在线 | 第四色播日韩第一页 |