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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機頻率計 顯示有問題

[復制鏈接]
跳轉到指定樓層
樓主
有大神能幫我看看是哪兒出問題了嗎,想弄一個脈沖頻率計,顯示有問題啊,只有不輸入頻率時是對的

  1. ;********************************************************************************
  2. ;頻率計———六位數碼管顯示                                                        *
  3. ;喇叭接p3.7口,數碼管數據p0,數碼管控制p2                                        *
  4. ;p3.5為頻率輸入端。p1.4是控制信號輸出端                                         *
  5. ;在不增加任何外部計數硬件的情況下,本試驗測試軟件可測最高頻率達到460KHz。       *
  6. ;用一根1pin排線短接P1.4 → P3.5 顯示:; 000066(Hz)                             *
  7. ;工作原理:                                                                     *
  8. ;1S 鐘內對輸入脈沖所計數的次數則為頻率值。                                      *
  9. ;16位二進制加法計數器的最大計數值為 65535。                                     *
  10. ;設置定時器 0 工作在定時方式1,定時1S。                                         *
  11. ;設置定時器 1 工作在計數方式1,對輸入脈沖進行計數,溢出產生中斷。               *
  12. ;將定時器 1 中斷定義為優先。在中斷處理程序里對中斷次數進行計數。1S到后,        *
  13. ;將中斷次數和計數器里的計數值取出進行綜合數據處理,處理后的數據送數碼管顯示。   *
  14. ;信號來源:                                                                     *
  15. ;1、軟件里對 P1.4 定時取反,形成輸出脈沖,接到 P3.5 可自測。                     *
  16. ;包含:外部中斷設置,中斷服務程序,定時程序,定時服務程序                       *
  17. ;以及數據處理,顯示,包括三位十進制數轉化為四位BCD碼,                          *
  18. ;********************************************************************************
  19.         BEEP   BIT  P3.7        ;蜂鳴器控制線
  20.         S1     BIT  P2.7        ;數碼管位線
  21.         S2     BIT  P2.6
  22.         S3     BIT  P2.5
  23.         S4     BIT  P2.4
  24.         S5     BIT  P2.3
  25.         S6     BIT  P2.2
  26.         S7     BIT  P2.1
  27.         S8     BIT  P2.0
  28.         LED_DATA   EQU  P0      ;數碼管數據定義
  29. ;--------------------------------------------------------------
  30.         TIMER_H   EQU   46H     ;定時器高位字節單元
  31.         TIMER_L   EQU   47H     ;定時器低位字節單元
  32.         TIMCOUNT  EQU   48H     ;時間中斷數
  33.         INT_H    EQU   45H      ;T1計數緩沖單元高地址
  34.         INT_L    EQU   44H      ;T1計數緩沖單元低地址
  35.         INT_G    EQU   43H      ;T1計數溢出次數計數
  36.         T_G      EQU   63H
  37.         T_H      EQU   60H      ;數據顯示的高位
  38.         T_S      EQU   61H      ;數據顯示中位
  39.         T_M      EQU   62H      ;數據顯示低位
  40.         DISSTART EQU   70H      ;顯示單元首地址
  41. ;--------------------------------------------------------------
  42.            ORG 00H
  43.            JMP MAIN             ;主程序開始
  44.            ORG 0BH
  45.            JMP TIMER_INT        ;定時器T0中斷服務程序
  46.            ORG  1BH
  47.            JMP  TIMER1          ;定時器T1中斷服務程序
  48.            ORG 030H
  49. ;-------------------------------------------------------------
  50. ;主程序
  51. ;-------------------------------------------------------------
  52. MAIN:      MOV  SP,#30H         ; 設置SP指針
  53.            LCALL PRO_SET        ;初始化
  54.            LCALL TIM_T0
  55. MLP:
  56.            LCALL EX_PRO         ;外部中斷數據轉換
  57.            LCALL EX_DISPLAY     ;外部中斷數據顯示
  58.                                 ;我們利用它來進行中斷計數操作
  59.            JMP MLP
  60. ;---------------------------------------------------------
  61. ;初始化程序
  62. ;---------------------------------------------------------
  63. PRO_SET:
  64.           MOV A,#00H
  65.           MOV B,#00H
  66.           MOV 2AH,A
  67.           MOV P0,#0FFH
  68.           MOV P1,#0FFH
  69.           MOV P2,#0FFH
  70.           MOV INT_H,#00H
  71.           MOV INT_L,#00H
  72.           MOV INT_G,#00H
  73.           MOV T_S,#00H
  74.           MOV T_H,#00H
  75.           MOV T_M,#00H
  76.           MOV T_G,#00H
  77.           MOV TIMCOUNT,#00H
  78.           MOV TIMER_H,#4CH      ;定時 50 MS
  79.           MOV TIMER_L,#0FH        
  80.           CLR BEEP
  81.           SETB  P3.5            ;3.5端口(T1)置輸入狀態
  82.           RET
  83. ;--------------------------------------------------------
  84. ;對T1溢出產生中斷的次數進行計數
  85. ;計滿65535,產生一次溢出中斷。
  86. ;--------------------------------------------------------
  87. TIMER1:
  88.           INC  2AH
  89.           RETI
  90. ;--------------------------------------------------------
  91. ;定時/計數器設置
  92. ;--------------------------------------------------------
  93. TIM_T0:   MOV TMOD,#0D1H         ;
  94.           MOV TH0,TIMER_H        ;設置定時初值高位
  95.           MOV TL0,TIMER_L        ;設置定時初值低位
  96.           MOV  TH1,#00H          ;清T1計數器
  97.           MOV  TL1,#00H
  98.           MOV  IE,#8AH           ;開中斷總允許,允許T1溢出中斷
  99.           SETB  PT1              ;TIMER1優先
  100.           SETB  TR1
  101.           SETB  TR0              ;定時器開始工作
  102.           RET
  103. ;-------------------------------------------------------
  104. ;定時器0中斷服務程序
  105. ;-------------------------------------------------------
  106. TIMER_INT:
  107.          CLR TR0              ;關閉定時器
  108.          MOV TL0,TIMER_L      ;重新賦初值
  109.          MOV TH0,TIMER_H                 ;
  110.          INC TIMCOUNT         ;定時1S,時間單位
  111.          MOV A,TIMCOUNT       ;查看數量值
  112.          CJNE A,#20,T_END     ;如果沒有到1S返回
  113.          CLR  TR1
  114.          MOV TIMCOUNT,#00H    ;到1S則清零
  115.          MOV INT_L,TL1        ;取出計數值
  116.          MOV INT_H,TH1        ;
  117.          MOV  INT_G,2AH
  118.          MOV  TH1,#00H
  119.          MOV  TL1,#00H
  120.          MOV  2AH,#00H
  121.          SETB  TR1
  122. T_END:   SETB TR0             ;重新開始定時操作
  123.          RETI
  124. ;-------------------------------------------------------
  125. ;-------------------------------------------------------
  126. EX_DISPLAY:
  127.          MOV R0,#DISSTART      ;獲得顯示單元首地址
  128.          MOV R1,#0BFH          ;從第二個數碼管開始
  129.          MOV R2,#06H           ;共顯示6位數碼管
  130. DISLP:  MOV LED_DATA,@R0      ;讀取顯示單元數據
  131.          INC R0                ;取下一個單元地址
  132.          MOV P2,R1             ;開始顯示當前位
  133.          MOV A,R1              ;準備顯示下一位
  134.          RR A                          ;
  135.          MOV R1,A              ;下一位
  136.          LCALL DELAY5MS        ;延時 5 MS
  137.          DJNZ R2,DISLP         ;重復顯示下一個
  138.          RET                   ;顯示完成,返回
  139. ;-----------------------------------------------------
  140. ;時間處理,主要為 BCD碼轉換,查表
  141. ;-----------------------------------------------------
  142. EX_PRO:   SETB PSW.3                    ;準備 寄存器
  143.           CLR PSW.4                     ;
  144.           MOV R6,INT_H                 ;得到高位數據
  145.           MOV R7,INT_L                  ;得到低位數據
  146.           MOV R5,INT_G
  147.           LCALL DATA_PRO               ;開始轉換
  148.           LCALL BCD                 ;轉換完成后,開始進行碼型變換
  149.           MOV R0,#DISSTART          ;開始填充顯示單元
  150.           MOV R2,#06H                ;共計填充 6 位
  151.   PRLP:   MOV A,@R0                  ;獲得當前位地址
  152.           MOV DPTR,#TAB_NU        ;獲得表頭
  153.           MOVC A,@A+DPTR         ;獲得編碼數據
  154.           MOV @R0,A                  ;保存編碼數據
  155.           INC R0                        ;指向下一個帶轉換數據
  156.           DJNZ R2,PRLP                 ;繼續轉換,直到完成
  157.           RET                           ;轉換完成,返回
  158. ;-------------------------------------------------------------
  159. ;兩位 十六進制 轉化為 2 位 BCD 碼
  160. ;高位 ->R6 低位 ->R7,轉化后 從高到低 T_S,T_M,T_H
  161. ;-------------------------------------------------------------
  162. DATA_PRO:
  163.            PUSH PSW
  164.            SETB PSW.3              ;設置當前寄存器
  165.            CLR  PSW.4
  166.            CLR  A                   ;清累加器
  167.            MOV T_G,A
  168.            MOV T_H,A               ;清除出口單元,準備轉換
  169.            MOV T_M,A
  170.            MOV T_S,A
  171.            MOV R2,#24              ;共計轉換24位
  172. HB3:       MOV A,R7                ;獲得低位數據
  173.            RLC A                   ;帶位左移,高位數據在CY中
  174.            MOV R7,A                ;保存數據
  175.            MOV A,R6                ;取得高位數
  176.            RLC A                   ;帶進位左移
  177.            MOV R6,A                ;保存數據
  178.            MOV A,R5                ;取得高位數
  179.            RLC A                   ;帶進位左移
  180.            MOV R5,A
  181.            MOV A,T_S               ;得到低位數據
  182.            ADDC A,T_S              ;累加
  183.            DA A                    ;十進制調整
  184.            MOV T_S,A               ;保存數據
  185.            MOV A,T_M               ;得到第二位數據
  186.            ADDC A,T_M              ;累加
  187.            DA A                    ;十進制調整
  188.            MOV T_M,A               ;保存結果
  189.            MOV A,T_H               ;得到第三位
  190.            ADDC A,T_H              ;累加
  191.            DA A
  192.            MOV T_H,A               ;保存
  193.            MOV A,T_G               ;得到第四位
  194.            ADDC A,T_G              ;累加
  195.            MOV T_G,A
  196.            DJNZ R2,HB3             ;沒有轉換完畢,重復轉換
  197.            POP PSW                 ;轉換完畢,恢復PSW
  198.            RET                     ;返回
  199. ;-----------------------------------------------------------
  200. ;碼型變換,將帶轉換的數據分成,不同的數位,并轉換成單位BCD碼
  201. ;-----------------------------------------------------------
  202. BCD:       MOV R0,#DISSTART    ;獲得首地址
  203.            MOV A,T_S           ;獲得待轉化的低位
  204.            MOV B,#10           ;轉化進制,如果要進行十進制轉換 改為 10
  205.            DIV AB              ;計算 A/B
  206.            MOV @R0,B           ;第一位轉換完畢,保存低位轉化后的數據
  207.            INC R0              ;自增
  208.            MOV @R0,A           ;保存高位
  209.            INC R0              ;取第二個數據地址
  210.            MOV A,T_M           ;獲得第二個需要轉換的數據
  211.            MOV B,#10           ;十六進制
  212.            DIV AB              ;計算
  213.            MOV @R0,B           ;存低位
  214.            INC R0
  215.            MOV @R0,A           ;存高位
  216.            INC R0              ;第三位
  217.            MOV A,T_H           ;獲得第三個需要轉換的數據
  218.            MOV B,#10           ;十六進制
  219.            DIV AB              ;計算
  220.            MOV @R0,B           ;存低位
  221.            INC R0
  222.            MOV @R0,A           ;存高位
  223.            RET                 ;完畢,返回
  224. ;---------------------------------------------------
  225. ;定時 5MS
  226. ;---------------------------------------------------
  227. DELAY5MS:
  228.    PUSH PSW
  229.    CLR  PSW.3
  230.    SETB  PSW.4
  231.    MOV R0,#250
  232.    MOV R1,#2
  233. D20:     DJNZ R0,D20
  234.           MOV R0,#250
  235.           DJNZ R1,D20
  236.           POP PSW
  237.           RET
  238. ;----------------------------------------------------------------
  239. ;這是數字顯示表格,其中 帶小數點的數字比不帶小數點的數字小20
  240. ; 比如 0 的顯示代碼為 28;那么 0.的顯示代碼為 8;如此類推
  241. ;----------------------------------------------------------------
  242. TAB_NU:
  243.    DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;3FH,06H,5BH,04FH,66H,6DH,7DH,07H,7FH,6FH;28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h,30h,25h,0a9h,26h,0a1h,0b1h;
  244.    ;DB 8H,5eH,82H,42H,54H,41H,1H,5aH,00H,40H,00,00,00,00,00,00;帶小數點
  245. ;-----------------------------------------------------------------
  246.     END     ;告訴編譯器本程序到此結束。
復制代碼




捕獲.PNG (30.95 KB, 下載次數: 29)

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

使用道具 舉報

沙發
ID:401564 發表于 2018-12-4 10:04 | 只看該作者
TMOD設定為外部輸入計數器模式,而不是內部的定時器模式,你現在設定的是內部的時鐘作為16位計數器的時鐘源
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久国产a级 欧美日韩国产免费 | 亚洲国产精品视频 | 国产免费播放视频 | 日韩中文字幕 | 毛片网站在线观看 | 久久夜色精品国产 | 成人一区二 | 欧美精品v | a级毛片国产| 视频二区 | 无码日韩精品一区二区免费 | 国产成人精品一区二 | 午夜性视频 | 毛片99| 亚洲精品一区二区冲田杏梨 | 久久久一区二区三区四区 | 国产免费拔擦拔擦8x高清 | 亚洲福利在线视频 | 美女视频一区二区三区 | 一级毛片视频 | 久久精品国产一区二区电影 | 久久精品免费一区二区 | 黄网站涩免费蜜桃网站 | 国产高清视频一区 | 亚洲九九| 一级a爱片性色毛片免费 | 日韩 欧美 二区 | 欧美久久久久 | 国产在线视频一区 | 精品视频在线一区 | 成人日韩 | 日韩国产欧美一区 | 免费观看的黄色网址 | 亚洲欧美综合精品久久成人 | 精品国产一区二区三区免费 | 色综合久久88色综合天天 | 夜夜夜夜夜夜曰天天天 | 婷婷久久久久 | 97色在线观看免费视频 | 精品国产不卡一区二区三区 | 久草欧美 |