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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求助。溫度顯示與時鐘顯示沖突了

[復制鏈接]
跳轉到指定樓層
樓主
ID:271997 發表于 2018-1-5 15:56 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
在做課程設計,其中有一條是需要時間與溫度交替顯示。
我寫好了溫度顯示和時間顯示,分別測試都已經可以實現功能了。
但是,一旦把溫度顯示和時間顯示合并在一個程序中,時間顯示是正常的,但是溫度顯示為“FE”了。
測試了一下,發現沒有加進時間中斷程序的時候,溫度顯示是正常的,加進來時間中斷程序之后,溫度顯示就變成了“EF”。

弄了一天都沒有找到哪里錯了,請大家指出程序的錯誤,謝謝啦!
下面是代碼
  1.       FLAG1 BIT 00H         ;FLAG1:標志位,為"1"時表示檢測到DS18B20
  2.       TEMPER_NUM EQU 38H    ;TEMPER_NUM:保存讀出的溫度數據
  3.       TEMPER_L EQU 5BH      ;溫度的低位
  4.       TEMPER_H EQU 5AH      ;溫度的高位
  5.       TEMP EQU 5DH          ;臨時存放溫度數據的單元
  6.       DIS_TEMP EQU 58H      ;58H存放顯示溫度的個位數,59H存放顯示溫度的十位數
  7.                         DIS_C EQU 5CH
  8.       DQ BIT P1.3          ; DQ:DS18B20的數據總線接腳
  9.       ;DS18B20初始化程序
  10.       ;//*****************************************//
  11. ;定義區
  12. ;//===============================
  13. ;//時間計數緩沖區     
  14.                          DIS_MIN EQU 50H   ;50H,51H
  15.        DIS_HOUR EQU 52H  ;52H,53H
  16.        DIS_DAY EQU 54H   ;54H,55H
  17.                          DIS_MON EQU 56H         ;56H,57H
  18. ;//===============================
  19. ;//時間儲存單元
  20.        MONTH   EQU 30H
  21.        DAY     EQU 31H
  22.        HOUR    EQU 32H
  23.                          MINUTE  EQU 33H
  24.        COUNT_MIN EQU 4FH
  25.                          DL_2S   EQU 41H

  26.       ORG 0000H
  27.       LJMP  MAIN
  28.                         ORG 000BH
  29.                         LJMP TIMER_T0
  30.       ORG 0030H
  31.                        
  32. MAIN:  MOV R0,#50H
  33.         MOV R2,#8
  34. CLEAR:  MOV @R0,#00
  35.         INC R0
  36.         DJNZ R2,CLEAR   ;緩沖區清0
  37.                                 ACALL INT_TO                ;定時器T0初始化
  38.                                 MOV MONTH,#01H
  39.                                 MOV DAY,#01H
  40.                                 MOV HOUR,#00
  41.                                 MOV MINUTE,#00
  42.                                 MOV DL_2S,#64H
  43.       MOV A,#00
  44.                   MOV TEMPER_NUM,A
  45.       MOV TEMPER_L,#00
  46.       MOV TEMPER_H,#00
  47.                         MOV DIS_C,#0CH
  48.       ACALL INIT_1820
  49. LOOP1:  NOP                               
  50.         CALL DISPLY_CLOCK
  51.                                 CALL DL10MS
  52.                                 DJNZ DL_2S,LOOP1
  53.                                 MOV DL_2S,#64H

  54. LOOP2:  CALL DISPLY_DATE
  55.                                 CALL DL10MS
  56.                                 DJNZ DL_2S,LOOP2
  57.                                 MOV DL_2S,#64H
  58.                                
  59. LOOP3:  CALL TEMPER
  60.                                 CALL DISPLY_TEMP
  61.                                 CALL DL10MS
  62.                                 DJNZ DL_2S,LOOP3
  63.                                 MOV DL_2S,#64H
  64.                                 LJMP LOOP1                       
  65. ;初始化程序
  66. INIT_1820: SETB DQ
  67.        NOP
  68.        CLR DQ       ;主機發出延時540us的復位低脈沖
  69.        MOV R0,#36
  70.        LCALL DELAY
  71.        SETB DQ      ;然后拉高數據線
  72.        NOP
  73.        NOP
  74.        MOV R0,#36
  75. TSR2: JNB DQ,TSR3     ;等待DS18B20的回應
  76.                         DJNZ R0,TSR2
  77.                         LJMP TSR4;     延時
  78. TSR3: SETB FLAG1;     置標志位,表示DS1820存在
  79.       LJMP TSR5
  80. TSR4: CLR FLAG1;      清標志位,表示DS1820不存在
  81.       LJMP TSR7
  82. TSR5: MOV R0,#06BH;   200us
  83. TSR6: DJNZ R0,TSR6;    復位成功!時序要求延時一段時間
  84. TSR7: SETB DQ
  85.           RET
  86. ;//定時器初始化
  87. INT_TO: MOV COUNT_MIN,#20
  88.         MOV TMOD,#01H
  89.         MOV TH0,#0FFH                ;延時50MS,常數3CB0H
  90.         MOV TL0,#0B0H
  91.         SETB EA
  92.         SETB ET0
  93.         SETB TR0
  94.                                 RET       

  95. ;//================================時鐘中斷程序
  96.         ORG 0200H
  97. TIMER_T0:PUSH ACC
  98.         PUSH PSW
  99.         MOV TH0,#0FFH
  100.         MOV TL0,#0B0H
  101.         DJNZ COUNT_MIN,TINEXT
  102.                                 MOV COUNT_MIN,#20
  103.         MOV A,MINUTE       ;分處理
  104.         ADD A,#01H
  105.         DA A
  106.         MOV MINUTE, A
  107.         CJNE A, #60H,TINEXT;分處理結束
  108.         MOV MINUTE,#00     ;分清零
  109.         MOV A,HOUR                                 ;時處理
  110.         ADD A,#01H
  111.         DA A
  112.         MOV HOUR, A
  113.         CJNE A, #24H,TINEXT;時處理結束
  114.         MOV HOUR,#00                         ;時清零
  115.                                 MOV A,DAY                                   ;日處理
  116.         ADD A,#01H
  117.         DA A
  118.         MOV DAY, A
  119.         CJNE A, #31H,TINEXT;日處理結束
  120.         MOV DAY,#01                                 ;日清零
  121.                                 MOV A,MONTH                                 ;月處理
  122.                                 ADD A,#01H
  123.                                 DA A
  124.                                 MOV MONTH,A
  125.                                 CJNE A, #13,TINEXT ;月處理結束
  126.                                 MOV MONTH,#01                         ;月清零
  127. TINEXT: POP PSW
  128.         POP ACC
  129.         RETI
  130.                                
  131. TEMPER: ACALL RE_CONFIG
  132.       ACALL GET_TEMPER
  133.       CALL TEMPER_COV
  134.       RET
  135.       ;//*****************************************//
  136.       ; 重新寫DS18B20暫存存儲器設定值
  137.       ;//*****************************************//
  138. RE_CONFIG: JB FLAG1,RE_CONFIG1; 若DS18B20存在,轉RE_CONFIG1
  139.            RET
  140. RE_CONFIG1:MOV A,#0CCH;  發SKIP ROM命令
  141.            LCALL WRITE_1820
  142.            MOV A,#4EH;  發寫暫存存儲器命令
  143.            LCALL WRITE_1820
  144.            MOV A,#00H;  不 TH(報警上限)中寫入00H
  145.            LCALL WRITE_1820
  146.            MOV A,#00H;   TL(報警下限)中寫入00H
  147.            LCALL WRITE_1820
  148.            MOV A,#1FH;   選擇9位溫度分辨率
  149.            LCALL WRITE_1820
  150.            RET
  151.       ;//*****************************************//
  152.       ; 讀出轉換后的溫度值
  153.       ;//*****************************************//
  154. GET_TEMPER: SETB DQ; 定時入口
  155.             LCALL INIT_1820
  156.             JB FLAG1,TSS2
  157.             RET; 若DS18B20不存在則返回
  158. TSS2:       MOV A,#0CCH; 跳過ROM匹配
  159.             LCALL WRITE_1820
  160.             MOV A,#44H; 發出溫度轉換命令
  161.             LCALL WRITE_1820
  162.             MOV R0,#50;等待A/D轉換結束,12位的話750us
  163.             LCALL DELAY
  164.             LCALL INIT_1820
  165.             MOV A,#0CCH; 跳過ROM匹配
  166.             LCALL WRITE_1820
  167.             MOV A,#0BEH; 發出讀溫度命令
  168.             LCALL WRITE_1820
  169.             LCALL READ_18200
  170.             MOV TEMPER_NUM,A; 將讀出的溫度數據保存
  171.             RET
  172.       ;//*****************************************//
  173.       ; 讀DS18B20的程序,從DS18B20中讀出一個字節的數據
  174.       ;//*****************************************//
  175.       READ_1820: MOV R2,#8
  176.              RE1: CLR C
  177.                  SETB  DQ
  178.                  NOP
  179.                  NOP
  180.                  CLR DQ
  181.                  NOP
  182.                  NOP
  183.                  NOP
  184.                  SETB DQ
  185.                  MOV R3,#7
  186.                  DJNZ R3,$
  187.                  MOV C,DQ
  188.                  MOV R3,#23
  189.                  DJNZ R3,$
  190.                  RRC A
  191.                  DJNZ R2,RE1
  192.                  RET
  193.       ;//*****************************************//
  194.       ; 寫DS18B20的程序
  195.       ;//*****************************************//
  196.       WRITE_1820: MOV R2,#8
  197.                   CLR C
  198.              WR1: CLR DQ
  199.                   MOV R3,#6
  200.                   DJNZ R3,$
  201.                   RRC A
  202.                   MOV DQ,C
  203.                   MOV R3,#23
  204.                   DJNZ R3,$
  205.                   SETB DQ
  206.                   NOP
  207.                                                                         DJNZ R2,WR1
  208.                   SETB DQ
  209.                   RET
  210.       ;//*****************************************//
  211.       ; 讀DS18B20的程序,從DS18B20中讀出兩個字節的溫度數據
  212.       ;//*****************************************//
  213.       READ_18200:MOV R4,#2; 將溫度高位和低位從DS18B20中讀出
  214.                    MOV R1,#5BH; 低位存入5BH(TEMPER_L),高位存入5AH(TEMPER_H)
  215.             RE00:MOV R2,#8
  216.             RE01:CLR C
  217.                  SETB DQ
  218.                  NOP
  219.                  NOP
  220.                  CLR DQ
  221.                  NOP
  222.                  NOP
  223.                  NOP
  224.                  SETB DQ
  225.                  MOV R3,#7
  226.                  DJNZ R3,$
  227.                  MOV C,DQ
  228.                  MOV R3,#23
  229.                  DJNZ R3,$
  230.                  RRC A
  231.                  DJNZ R2,RE01
  232.                  MOV @R1,A
  233.                  DEC R1
  234.                  DJNZ R4,RE00
  235.                  RET
  236.       ;//*****************************************//
  237.       ; 將從DS18B20中讀出的溫度數據進行轉換
  238.       ;//*****************************************//
  239.       TEMPER_COV:   MOV A,#0F0H
  240.                     ANL A,TEMPER_L; 舍去溫度低位中小數點后的四位溫度數值
  241.                     SWAP A
  242.                     MOV TEMPER_NUM,A
  243.                     MOV A,TEMPER_L
  244.                     JNB ACC.3,TEMPER_COV1; 四舍五入去溫度值
  245.                     INC TEMPER_NUM
  246.       TEMPER_COV1:  MOV A,TEMPER_H
  247.                     ANL A,#07H
  248.                     SWAP A
  249.                     ORL A,TEMPER_NUM
  250.                     MOV TEMPER_NUM,A; 保存變換后的溫度數據
  251.                     LCALL BIN_BCD
  252.                     RET
  253.       ;//*****************************************//
  254.       ; 將16進制的溫度數據轉換成壓縮BCD碼
  255.       ;//*****************************************//
  256.       BIN_BCD: MOV DPTR,#TEMP_TAB
  257.                MOV A,TEMPER_NUM
  258.                MOVC A,@A+DPTR
  259.                MOV TEMPER_NUM,A
  260.       RET
  261.   TEMP_TAB:   DB 00H,01H,02H,03H,04H,05H,06H,07H
  262.               DB 08H,09H,10H,11H,12H,13H,14H,15H
  263.               DB 16H,17H,18H,19H,20H,21H,22H,23H
  264.               DB 24H,25H,26H,27H,28H,29H,30H,31H
  265.               DB 32H,33H,34H,35H,36H,37H,38H,39H
  266.               DB 40H,41H,42H,43H,44H,45H,46H,47H
  267.               DB 48H,49H,50H,51H,52H,53H,54H,55H
  268.               DB 56H,57H,58H,59H,60H,61H,62H,63H
  269.               DB 64H,65H,66H,67H,68H,69H,70H,71H
  270.                     DB 72H,73H,74H,75H,76H,77H,78H,79H
  271.               DB 80H,81H,82H,83H,84H,85H,86H,87H
  272.               DB 88H,89H,90H,91H,92H,93H,94H,95H
  273.               DB 96H,97H,98H,99H
  274. ;//*****************************************//
  275. ; 延時子程序
  276. ;為保證DS18B20的嚴格I/O時序,需做較精確的延時
  277. ;在DS18B20操作中,用到的延時有15us、90us、270us、540us、750us
  278. ;因為這些延時均為15us的倍數,因此可編寫一個DELAY15(n)函數
  279. ;//*****************************************//
  280. DELAY:
  281. TEMP_LOOP:MOV R1,#06H
  282. TEMP_LOOP1:DJNZ R1,TEMP_LOOP1
  283.        DJNZ R0,TEMP_LOOP
  284.        RET
  285. ;//*****************************************//
  286. ;500毫秒延時子程序和10毫秒延時子程序
  287. ;//*****************************************//
  288. DELAY500:MOV R4,#248
  289. DA222:   MOV R5,#248
  290.                                  DJNZ R5,$
  291.                                  DJNZ R4,DA222
  292.                                  RET
  293.                                                                
  294. DL10MS:  MOV R5,#10
  295. DL1:     MOV R6,#20
  296. DL:      NOP
  297.          NOP
  298.          NOP
  299.          DJNZ R6,DL
  300.          DJNZ R5,DL1
  301.          RET

  302. ;=================================顯示一位子程序
  303. ;顯示子程序
  304. ;顯示緩沖區地址:(R0)
  305. ;位控(R2)
  306. DIS:     MOV DPTR, #SEG_TAB
  307.          MOV A,@R0
  308.          MOVC A,@A+DPTR
  309.          MOV P0,A    ;輸出
  310.          NOP
  311.          NOP
  312.          MOV A,R2
  313.          MOV P1,A
  314.          NOP
  315.          NOP
  316.          RET
  317.                                  
  318. SEG_TAB: DB 3FH,06H,5BH,4FH
  319.                                  DB 66H,6DH,7DH,07H
  320.                                  DB 7FH,6FH,77H,7CH
  321.                                  DB 39H,5EH,79H,71H

  322. ;=================================BCD分離子程序
  323. ;  待轉換的數放在(R2)中
  324. ;  轉換結果放在(R0)指出的單元中

  325. BCDS:  MOV A, R2
  326.        ANL A,#00001111B
  327.        MOV @R0,A
  328.        INC R0
  329.        MOV A,R2
  330.        ANL A,#11110000B
  331.        SWAP A
  332.        MOV @R0,A
  333.        RET
  334. ;================================顯示程序

  335. DISPLY_TEMP:
  336.                           MOV R2, TEMPER_NUM; 取溫度
  337.         MOV R0, #DIS_TEMP
  338.         CALL BCDS
  339.                                
  340.                                 NOP
  341.                                 MOV R0,#DIS_C
  342.                                 MOV R2,#00000101B
  343.                                 CALL DIS
  344.                                 CALL DL10MS
  345.         MOV R0,#DIS_TEMP
  346.         MOV R2,#00000100B   ;溫度個位
  347.         CALL DIS
  348.         CALL DL10MS
  349.         INC R0
  350.         MOV R2,#00000011B   ;溫度十位
  351.         CALL DIS
  352.         CALL DL10MS

  353.         RET
  354. DISPLY_CLOCK:
  355.                                 MOV R2, MINUTE; 取分值
  356.         MOV R0, #DIS_MIN
  357.         CALL BCDS
  358.         MOV R2, HOUR;   取時值
  359.         MOV R0, #DIS_HOUR
  360.         CALL BCDS
  361.                                
  362.                                 NOP
  363.         MOV R0,#DIS_MIN
  364.         MOV R2,#00000101B   ;分個位
  365.         CALL DIS
  366.         CALL DL10MS
  367.         INC R0
  368.         MOV R2,#00000100B   ;分十位
  369.         CALL DIS
  370.         CALL DL10MS
  371.         INC R0

  372.         MOV R2,#00000010B   ;時個位
  373.         CALL DIS
  374.         CALL DL10MS
  375.         INC R0
  376.         MOV R2,#00000001B   ;時十位
  377.         CALL DIS
  378.         CALL DL10MS
  379.         RET

  380. DISPLY_DATE:
  381.                                 MOV R2, DAY;    取日值
  382.         MOV R0, #DIS_DAY
  383.         CALL BCDS
  384.                                 MOV R2,MONTH;   取月值
  385.         MOV R0, #DIS_MON
  386.                                 CALL BCDS
  387.                                
  388.                                 NOP
  389.         MOV R0,#DIS_DAY
  390.         MOV R2,#00000101B   ;日個位
  391.         CALL DIS
  392.         CALL DL10MS
  393.         INC R0
  394.         MOV R2,#00000100B   ;日十位
  395.         CALL DIS
  396.         CALL DL10MS
  397.         INC R0

  398.         MOV R2,#00000010B   ;月個位
  399.         CALL DIS
  400.         CALL DL10MS
  401.         INC R0
  402.         MOV R2,#00000001B   ;月十位
  403.         CALL DIS
  404.         CALL DL10MS
  405.         INC R0
  406.         RET

  407. END
復制代碼



評分

參與人數 1黑幣 +1 收起 理由
梅花三弄 + 1

查看全部評分

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

使用道具 舉報

沙發
ID:271997 發表于 2018-1-5 20:52 | 顯示全部樓層
yzwzfyz 發表于 2018-1-5 19:49
看在你寫匯編的面子上,幫你一下,不懂再來問。

在代碼開始的定義區,我也定義了你所說的三個存儲區。不過溫度數值的顯示區和時間數值的顯示區分別都放在了溫度和時間存儲定義區了。
剛才問了老師,老師說可能是時鐘中斷程序影響了18B20的延時時序。要我在調用溫度的時候再啟動18B20.
這個18b20程序是老師給我的,我還沒有太理解老師說的啟動18B20,“啟動18B20”這個要求具體我的代碼中的哪一條指令呢?
我的18B20程序在后面,已經標注好了,很容易找到。
高手能幫我看一下嗎?謝謝高手啦
回復

使用道具 舉報

板凳
ID:271997 發表于 2018-1-5 21:21 | 顯示全部樓層
真的看了整整一天都沒有發現錯誤。
還有我發現我的程序大多都是分開運行都是正常的,一旦拼接在一起,就不對了。有什么好的建議嗎
回復

使用道具 舉報

地板
ID:271997 發表于 2018-1-6 12:58 | 顯示全部樓層
發現錯了,之前為了使時間顯示快一點,給TH0和TH0了一個比較大的數值,但是調回3CB0之后,就正常顯示了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩福利视频 | 成人精品免费视频 | 欧美中文字幕一区二区三区亚洲 | 成年无码av片在线 | 欧美一区二区三区视频 | 免费看国产一级特黄aaaa大片 | 日本久久久久久久久 | 亚洲精品乱码久久久久久9色 | 亚洲免费观看视频 | 成人免费在线 | 中文字幕一区二区三区乱码图片 | av免费网址 | 国产盗摄视频 | 亚洲精品久久久久久久久久久久久 | 成人午夜视频在线观看 | 欧美日韩在线观看一区二区三区 | av男人的天堂av | 午夜a区 | 91豆花视频 | 黄色成人免费在线观看 | 日韩欧美在线视频播放 | 国产视频不卡一区 | 久久久久久999 | 99精品免费 | 一级特黄a大片 | 久久99精品久久久久久 | 在线观看国产视频 | 超碰97在线免费 | 五月花丁香婷婷 | 国产人免费人成免费视频 | 久久久久国产精品一区二区 | 自拍偷拍第一页 | 91久久夜色 | 日韩欧美中文字幕在线观看 | 午夜影院视频在线观看 | 久久久久久久久久久久一区二区 | 国产在线视频一区二区 | 日韩三级视频 | 99热播放| 夜夜骑综合 | 亚州激情 |