找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2390|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)頻率計(jì) 顯示有問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:394872 發(fā)表于 2018-11-17 16:37 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
有大神能幫我看看是哪兒出問題了嗎,想弄一個(gè)脈沖頻率計(jì),顯示有問題啊,只有不輸入頻率時(shí)是對(duì)的

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




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

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

使用道具 舉報(bào)

沙發(fā)
ID:401564 發(fā)表于 2018-12-4 10:04 | 只看該作者
TMOD設(shè)定為外部輸入計(jì)數(shù)器模式,而不是內(nèi)部的定時(shí)器模式,你現(xiàn)在設(shè)定的是內(nèi)部的時(shí)鐘作為16位計(jì)數(shù)器的時(shí)鐘源
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表