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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機搶答器匯編代碼在計分跳轉的地方有問題

[復制鏈接]
跳轉到指定樓層
#
ID:409772 發表于 2019-3-29 17:15 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
30黑幣
代碼在計分跳轉的地方有問題。最好能再幫我測試一下。謝謝

仿真原理圖如下


單片機源程序如下:
  1.         OK EQU 20H                       ;搶答開始標志位
  2.         RING EQU 22H                     ;響鈴標志位
  3.         DATA0 EQU 36H                    ;搶答按鍵口數據存放地址
  4.         ORG 0000H
  5.         AJMP MAIN
  6.         ORG 0003H  
  7.         AJMP INTT0
  8.         ORG 000BH
  9.         AJMP T0INT
  10.         ORG 001BH
  11.         AJMP T1INT
  12.         ORG 0040H
  13. MAIN:   MOV R1,#20                       ;初設搶答時間為20s
  14.         MOV R2,#30                       ;初設答題時間為30s
  15.         mov 38h,#60                      ;啟用錦囊時間從60s倒計時
  16.         MOV TMOD,#11H                    ;設置未定時器/模式1
  17.         MOV TH0,#0F0H
  18.         MOV TL0,#0FFH                    ;越高發聲頻率越高,越尖
  19.         MOV TH1,#3CH
  20.         MOV TL1,#0B0H                    ;50ms為一次溢出中斷
  21.         SETB EA
  22.         SETB ET0
  23.         SETB ET1                         ;允許二個中斷,T0/T1
  24.         CLR OK
  25.         CLR RING
  26.          SETB TR1
  27.          SETB TR0                        ;一開始就運行定時器,以開始顯示FFF.如果想重新計數,重置TH1/TL1就可以了

  28. ;查詢程序:
  29. START:   MOV DATA0,#0FFH                 ;初始化
  30.          MOV R5,#0BH
  31.          MOV R4,#0BH
  32.          MOV R3,#0BH
  33.          ACALL DISPLAY                   ;未開始搶答時候顯示FFF
  34.          JNB P3.3,SELSUB0
  35.          JNB P3.4,TZ3                    ;倒計時調整
  36.                        ;進入計分
  37.          JNB P2.4,start                 ;復位鍵,進入主程序
  38.          JB P3.0,NEXT
  39.          ACALL DELAY
  40.          JB P3.0,NEXT                    ;去抖動,如果"開始鍵"按下就向下執行,否者跳到非法搶答查詢
  41.          SETB EX0                        ;開放INT0
  42.          ACALL BARK                      ;按鍵發聲
  43.          MOV A,R1
  44.          MOV R6,A                    ;送R1->R6,因為R1中保存了搶答時間
  45.          SETB OK                         ;搶答標志位,在使用錦囊時用作判斷是搶答倒計時還是回答倒計時
  46.          MOV R3,#0AH                     ;搶答只顯示計時,滅號數
  47.          AJMP COUNT                      ;進入倒計時程序,"查詢有效搶答的程序"在COUNT里面
  48. NEXT:    JNB P1.0,FALSE1
  49.          JNB P1.1,FALSE2
  50.          JNB P1.2,FALSE3
  51.          JNB P1.3,FALSE4
  52.          JNB P1.4,FALSE5
  53.          JNB P1.5,FALSE6
  54.          JNB P1.6,TZ1
  55.          JNB P1.7,TZ2
  56.          AJMP START
  57. TZ1:     AJMP FALSE7
  58. TZ2:     AJMP FALSE8
  59. TZ3:     AJMP SELSUB1

  60. ;非法搶答處理程序:
  61. FALSE1: MOV R3,#01H
  62.         AJMP ERROR
  63. FALSE2: MOV R3,#02H
  64.         AJMP ERROR
  65. FALSE3: MOV R3,#03H
  66.         AJMP ERROR
  67. FALSE4: MOV R3,#04H
  68.         AJMP ERROR
  69. FALSE5: MOV R3,#05H
  70.         AJMP ERROR
  71. FALSE6: MOV R3,#06H
  72.         AJMP ERROR
  73. FALSE7: MOV R3,#07H
  74.         AJMP ERROR
  75. FALSE8: MOV R3,#08H
  76.         AJMP ERROR

  77. ;SELSUB0(搶答時間R1調整程序):
  78. SELSUB0: MOV A,R1
  79.          MOV B,#0AH
  80.          DIV AB
  81.          MOV R5,A
  82.          MOV R4,B
  83.          MOV R3,#0AH
  84.          ACALL DISPLAY                   ;先在兩個時間LED上顯示R1
  85.          JNB P3.5,INC0                   ;P3.5為+1s鍵,如按下跳到INCO
  86.          JNB P3.6,DEC0                   ;P3.6為-1s鍵,如按下跳到DECO
  87.          JNB P3.1,BACK0                  ;P3.1為確定鍵,如按下跳到BACKO
  88.          AJMP SELSUB0
  89. INC0:   MOV A,R1
  90.         CJNE A,#63H,ADD0                 ;如果不是99,R2加1,如果加到99,R1就置0,重新加起。
  91.         MOV R1,#00H
  92.         ACALL DELAY1
  93.         AJMP SELSUB0
  94. ADD0:   INC R1
  95.         ACALL DELAY1
  96.         AJMP SELSUB0
  97. DEC0:   MOV A,R1
  98.         JZ SETR1                         ;如果R1為0, R1就置99,
  99.         DEC R1
  100.         ACALL DELAY1
  101.         AJMP SELSUB0
  102. SETR1:  MOV R1,#63H
  103.         ACALL DELAY1
  104.         AJMP SELSUB0
  105. BACK0:  AJMP START

  106. ;SELSUB1(回答時間R2調整程序):
  107. SELSUB1: MOV A,R2
  108.         MOV B,#0AH
  109.         DIV AB
  110.        MOV R5,A
  111.        MOV R4,B
  112.        MOV R3,#0AH
  113.        ACALL DISPLAY
  114.     JNB P3.5,INC1
  115.     JNB P3.6,DEC1
  116.     JNB P3.1,BACK1
  117.     AJMP SELSUB1
  118. INC1:   MOV A,R2
  119.         CJNE A,#63H,ADD1
  120.         MOV R2,#00H
  121.         ACALL DELAY1
  122. AJMP SELSUB1
  123. ADD1:   INC R2
  124.          ACALL DELAY1
  125.          AJMP SELSUB1
  126. DEC1:   MOV A,R2
  127.      JZ SETR2
  128.      DEC R2
  129.     ACALL DELAY1
  130.     AJMP SELSUB1
  131. SETR2:  MOV R2,#63H
  132.         ACALL DELAY1
  133.         AJMP SELSUB1
  134. BACK1: AJMP START

  135. ;啟用錦囊程序:
  136. REPEAT:MOV A,38h                        ;使用錦囊時重新計時
  137.        MOV R6,A
  138.        CLR RING         ;當倒計時進入最后5秒的時候,啟用錦囊能消除蜂鳴

  139. ;倒計時程序(搶答倒計時和回答倒計時都跳到改程序):
  140. COUNT:  MOV R0,#00H                    ;重置定時器中斷次數
  141.         MOV TH1,#3CH
  142.         MOV TL1,#0B0H                  ;重置定時器
  143. RECOUNT:MOV A,R6                       ;R6保存了倒計時的時間,之前先將搶答時間或回答時間給R6
  144.         MOV B,#0AH
  145.     DIV AB                             ;除十分出個位/十位
  146.     MOV 30H,A                          ;十位存于(30H)
  147.     MOV 31H,B                          ;個位存于(31H)
  148.     MOV R5,30H                         ;取十位
  149.     MOV R4,31H                         ;取個位
  150.     MOV A,R6
  151.     SUBB A,#07H
  152.     JNC LARGER                   ;大于5s跳到LARGER,小于等于5s會提醒
  153.     MOV A,R0
  154.         CJNE A,#0AH,FULL               ;1s中0.5s向下運行
  155.     CLR RING
  156.     AJMP CHECK
  157. FULL: CJNE A,#14H,CHECK              ;下面是1s的情況,響并顯示號數并清R0,重新計
  158.       SETB RING
  159.       MOV A,R6
  160.     JZ QUIT                            ;計時完畢
  161.     MOV R0,#00H
  162.     DEC R6                            ;一秒標志減1
  163.       AJMP CHECK
  164. LARGER: MOV A,R0
  165.         CJNE A,#14H,CHECK          ;如果1s向下運行,否者跳到"停/顯示"
  166.         DEC R6                           ;計時一秒R6自動減1
  167.         MOV R0,#00H
  168. CHECK: JNB P3.1,QUIT         ;如按下停止鍵退出
  169.         JNB OK,CHECKK      ;只在回答倒計時才有效
  170.         AJMP NEXTT
  171. CHECKK:JNB P3.0,REPEAT    ;判斷是否使用錦囊
  172. NEXTT: ACALL DISPLAY
  173.    JB OK,ACCOUT;如果是搶答倒計時,如是則查詢搶答,否者跳過查詢繼續倒數(這里起到鎖搶答作用)
  174.        AJMP RECOUNT
  175. ACCOUT:MOV A,DATA0
  176.        JNB ACC.0,TRUE1
  177.        JNB ACC.1,TRUE2
  178.        JNB ACC.2,TRUE3
  179.        JNB ACC.3,TRUE4
  180.        JNB ACC.4,TRUE5
  181.        JNB ACC.5,TRUE6
  182.        JNB ACC.6,TZ7
  183.       JNB ACC.7,TZ8
  184.       AJMP RECOUNT
  185. TZ7: AJMP TRUE7
  186. TZ8: AJMP TRUE8   
  187. QUIT:  CLR OK                         ;如果按下了"停止鍵"執行的程序
  188.    CLR RING
  189.    AJMP START

  190. ;正常搶答處理程序:
  191. TRUE1: ACALL BARK
  192.        MOV A,R2
  193.        MOV R6,A              ;搶答時間R2送R6
  194.        MOV R3,#01H
  195.        CLR OK                ;因為答題的計時不再查詢搶答,所以就鎖了搶答
  196.        AJMP COUNT
  197. TRUE2:ACALL BARK
  198.       MOV A,R2
  199.       MOV R6,A
  200.       MOV R3,#02H
  201.       CLR OK
  202.       AJMP COUNT
  203. TRUE3:ACALL BARK
  204.       MOV A,R2
  205.       MOV R6,A
  206.       MOV R3,#03H
  207.       CLR OK
  208.       AJMP COUNT
  209. TRUE4:ACALL BARK
  210.       MOV A,R2
  211.       MOV R6,A
  212.       MOV R3,#04H
  213.       CLR OK
  214.       AJMP COUNT
  215. TRUE5: ACALL BARK
  216.         MOV A,R2
  217.         MOV R6,A
  218.         MOV R3,#05H
  219.         CLR OK
  220.         AJMP COUNT
  221. TRUE6:  ACALL BARK
  222.         MOV A,R2
  223.         MOV R6,A
  224.         MOV R3,#06H
  225.         CLR OK
  226.         AJMP COUNT
  227. TRUE7:  ACALL BARK
  228.         MOV A,R2
  229.         MOV R6,A
  230.         MOV R3,#07H
  231.         CLR OK
  232.         AJMP COUNT
  233. TRUE8:  ACALL BARK
  234.         MOV A,R2
  235.         MOV R6,A
  236.         MOV R3,#08H
  237.         CLR OK
  238.         AJMP COUNT

  239. ;犯規搶答程序:
  240. ERROR:  MOV R0,#00H
  241.         MOV TH1,#3CH
  242.         MOV TL1,#0B0H
  243.         MOV 34H,R3                ;犯規號數暫存與(34H)
  244. HERE:   MOV A,R0
  245.         CJNE A,#06H,FLASH         ;0.3s向下運行->滅并停響
  246.         CLR RING
  247.         MOV R3,#0AH
  248.         MOV R4,#0AH
  249.         MOV R5,#0AH               ;三燈全滅
  250.         AJMP CHECK1
  251. FLASH:  CJNE A,#0CH,CHECK1        ;下面是0.8s的情況,響并顯示號數并清R0,重新計
  252.         SETB RING
  253.         MOV R0,#00H
  254.         MOV R3,34H                ;取回號數
  255.         MOV R5,#0BH
  256.         MOV R4,#0BH               ;顯示FF和號數
  257.         AJMP CHECK1
  258. CHECK1: JNB P3.1,QUIT1
  259.         ACALL DISPLAY
  260.         AJMP HERE
  261. QUIT1:  CLR RING
  262.         CLR OK
  263.         AJMP START

  264. ;計分程序
  265. JNB P2.5,score
  266. //************ 負數****************//
  267. fushiwei:xrl p2,#00000110b ;101 //掃描分數負十位 //#00000001b
  268. MOV A,@r1  
  269. MOV DPTR,#DISPLAY  
  270. MOVC A,@A+DPTR
  271. MOV P0,A
  272. mov p0,#0ffh// ajmp huiqu
  273. //************ 計分程序 ************//
  274. score:mov 30h,#00h
  275. mov r0,#30h
  276. mov r1,#31h
  277. mov p2,#0ffh// #0f8h 111
  278. xrl p2,#00000011b //掃描序號 011 // #00000100b
  279. xunhuan:MOV A,30h
  280. MOV DPTR,#DISPLAY
  281. MOVC A,@A+DPTR
  282. MOV P0,A
  283. mov p0,#0ffh//
  284. huanle:xrl p2,#00000110b //101 //掃描分數十位 //#00000001b
  285. MOV A,@r1
  286. MOV DPTR,#DISPLAY
  287. MOVC A,@A+DPTR
  288. MOV P0,A
  289. mov p0,#0ffh//
  290. huiqu: inc r1  //掃描分數個位
  291. xrl p2,#00000011b //110//#00000100b
  292. MOV A,@r1  
  293. MOV DPTR,#DISPLAY
  294. MOVC A,@A+DPTR
  295. MOV P0,A
  296. jb p2.6,x
  297. z: jnb p2.6,z
  298. jb p2.6,plus ;若有按加法的則調至加法處
  299. x: jb p2.7,y
  300. w: jnb p2.7,w
  301. jb p2.7,lower ;若有按鍵發的則調至減法處
  302. y: jb p2.5,kk
  303. q: jnb p2.5,q
  304. jb p2.5,one  ;若有按換位的則跳轉置換為下位
  305. kk: dec r1 ;若無責跳轉循環顯示本位
  306. mov p0,#0ffh//
  307. xrl p2,#00000101b ;011 // #00000010b
  308. JNB P2.4,hui ;若主持人按下復位信號鍵,則轉向主程序
  309. ajmp xunhuan
  310. one:inc r1
  311. inc 30h
  312. two:mov p0,#0ffh
  313. xrl p2,#00000101b ;011 //#00000010b
  314. cjne @r0,#09h,xunhuan
  315. ajmp score
  316. hui:ljmp start
  317. plus:inc @r1 ;加分并判斷滿十
  318. cjne @r1,#0ah,kk
  319. ajmp jinwei
  320. lower:dec @r1 ;減分并判斷為零
  321. cjne @r1,#0ffh,kk
  322. ajmp panduan ;判斷十位是否也為 0
  323. oo: inc @r1
  324. ajmp jiewei
  325. panduan:dec @r1
  326. cjne @r1,#0ffh,oo
  327. ajmp fushu
  328. fushu:mov @r1,#01h  
  329. dec r1
  330. mov @r1,#0ah
  331. mov p0,#0ffh
  332. xrl p2,#00000101b  
  333. ljmp fushiwei //
  334. jinwei:mov @r1,#00h ;滿十進 1 并且本為清零
  335. dec r1
  336. inc @r1  
  337. mov p0,#0ffh//
  338. xrl p2,#00000101b ;110 101 // #00000010b
  339. ljmp xunhuan
  340. jiewei:mov @r1,#09h ;借 1 并且本為置九
  341. dec r1
  342. dec @r1
  343. mov p0,#0ffh//
  344. xrl p2,#00000101b ;110 101 //#00000010b
  345. ljmp xunhuan


  346. ;顯示程序:
  347. DISPLAY:MOV DPTR,#DAT1           ;查表顯示程序,利用P0口做段選碼口輸出/P2低三位做位選碼輸出
  348.         MOV A,R3
  349.         MOVC A,@A+DPTR
  350.         MOV P2,#0feH
  351.         MOV P0,A
  352.         ACALL DELAY
  353.         MOV DPTR,#DAT2
  354.         MOV A,R5
  355.         MOVC A,@A+DPTR
  356.         MOV P2,#0fdH
  357.         MOV P0,A
  358.         ACALL DELAY
  359.         MOV A,R4
  360.         MOVC A,@A+DPTR
  361.         MOV P2,#0fbH
  362.         MOV P0,A
  363.         ACALL DELAY
  364.         RET
  365. DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H  
  366. ;"滅","1","2","3","4","5","6","7","8","9","滅","F"
  367. DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H
  368. ;第一個為零,其他與上相同,因為十位如果為零顯示熄滅

  369. ;加減時間延時(起到不會按下就加N個數):
  370. DELAY1: MOV 35H,#08H
  371. LOOP0:  ACALL DISPLAY
  372.          DJNZ 35H,LOOP0
  373.          RET

  374. ;延時(顯示和去抖動用到):
  375. DELAY:  MOV 32H,#12H
  376. LOOP:   MOV 33H,#0AFH
  377. LOOP1:  DJNZ 33H,LOOP1
  378.         DJNZ 32H,LOOP
  379.     RET

  380. ;發聲程序:
  381. BARK:   SETB RING
  382.         ACALL DELAY1
  383.         ACALL DELAY1
  384.         CLR RING                  ;按鍵發聲
  385.     RET

  386. ;TO溢出中斷(響鈴程序) :
  387. T0INT:  MOV TH0,#0ECH
  388.         MOV TL0,#0FFH
  389.         JNB RING,OUT;
  390. CPL P3.7                ;RING標志位為1時候P3.7口不斷取反使喇叭發出一定頻率的聲音
  391. OUT:    RETI

  392. ;T1溢出中斷(計時程序):
  393. T1INT: MOV TH1,#3CH
  394.       MOV TL1,#0B0H
  395.       INC R0
  396.     RETI

  397. ;中斷服務程序:
  398. INTT0: MOV DATA0,P1   
  399.        CLR EX0
  400.      RETI
  401.      END
復制代碼

所有資料51hei提供下載:
Text1.rar (3.55 KB, 下載次數: 15)


最佳答案

查看完整內容

沒有人會幫你測試的,一個幾百行的匯編,就算是自己寫的,如果出現問題的話,運氣好的一下就能找到問題,運氣不好的,三五天也不一定能找到問題,更何況還不是自己寫的程序呢 你沒有學習板嗎?為什么要仿真呢?仿真用的時間要比燒錄用的時間多,而且,你最終還是要在燒錄的,像這種小程序,仿真的作用很小的,還不如直接燒錄來得快
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

5#
ID:775593 發表于 2020-11-3 20:16 | 只看該作者
請問你解決這個問題了嗎?可以分享嗎?
回復

使用道具 舉報

地板
ID:409772 發表于 2019-3-31 09:59 | 只看該作者
這是仿真

321.rar

18.8 KB, 下載次數: 8

仿真工程

回復

使用道具 舉報

板凳
ID:481641 發表于 2019-3-31 09:16 | 只看該作者
用開發板測吧,
回復

使用道具 舉報

沙發
ID:328014 發表于 2019-3-31 02:47 | 只看該作者
最好附上仿真工程
回復

使用道具 舉報

樓主
ID:401564 發表于 2019-3-29 17:15 | 只看該作者
沒有人會幫你測試的,一個幾百行的匯編,就算是自己寫的,如果出現問題的話,運氣好的一下就能找到問題,運氣不好的,三五天也不一定能找到問題,更何況還不是自己寫的程序呢
你沒有學習板嗎?為什么要仿真呢?仿真用的時間要比燒錄用的時間多,而且,你最終還是要在燒錄的,像這種小程序,仿真的作用很小的,還不如直接燒錄來得快
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本久久久久久 | 美女久久 | 久久免费视频观看 | 欧美片网站免费 | 国产精品免费一区二区三区四区 | 国产一级在线观看 | 午夜精品久久久久久久星辰影院 | 久久精品天堂 | 色视频网站 | 免费激情网站 | 精品国产乱码久久久久久蜜臀 | 一区在线播放 | 成人黄视频在线观看 | 国产一区二区三区免费 | 国产精品久久av | 国产99视频精品免费播放照片 | 美女久久视频 | 久久天天躁狠狠躁夜夜躁2014 | 一区久久| 91亚洲精品在线 | 自拍偷拍第1页 | 青草久久免费视频 | 一区二区免费看 | 日韩在线欧美 | 国产精品视频网站 | 国产精品99久久久久久人 | 一级毛片视频免费观看 | 99久久精品免费看国产四区 | 日韩一区二区三区在线观看 | 美女三区| 中文字幕精品一区 | 亚洲午夜精品一区二区三区他趣 | 在线观看黄色 | 羞羞视频在线免费 | 久久精品视频网站 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 日韩av资源站| 久久成人精品视频 | 日本不卡高字幕在线2019 | 亚洲影视在线 | av中文字幕网站 |