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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我的單片機步進電機課程設計 含匯編源碼及注釋

[復制鏈接]
跳轉到指定樓層
樓主
ID:394934 發表于 2018-9-7 12:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機步進電機課程設計
可實現調速以及正反轉等功能
  1. IOY0  EQU  3000H  ;片選IOY0 對應的端口始地址
  2. MY8255_A  EQU  IOY0+00H*4  ;8255 的 A 口地址,輸出,鍵盤列選
  3. MY8255_B  EQU  IOY0+01H*4  ;8255 的 B 口地址,輸出,數碼管編碼
  4. MY8255_C  EQU  IOY0+02H*4  ;8255 的 C 口地址,低四位,讀鍵盤行號,高四位輸出,控制步進電機
  5. MY8255_MODE  EQU  IOY0+03H*4  ;8255的控制寄存器地址

  6. STACK1 SEGMENT STACK  ;定義一個棧區
  7.        DW 256 DUP(?)  ;開辟出256個字單元空間
  8. STACK1 ENDS

  9. DATA  SEGMENT
  10. DTABLE1   DB  6DH,79H,73H,77H,39H,06H,5BH,4FH,66H,80H  ;這十個分別表示的數碼管顯示是 5,E,P,A,C,1,2,3,4,.
  11. DTABLE3   DB  10H,30H,20H,60H,40H,0C0H,80H,90H  ;歩進電機正向轉速表
  12. DATA  ENDS

  13. CODE  SEGMENT
  14.       ASSUME CS:CODE,DS:DATA

  15. START: MOV AX,DATA
  16.        MOV DS,AX
  17.        MOV SI,3000H;建立緩沖區,存放要顯示的鍵值
  18. ;[SI][SI+2][SI+4][SI+6]中分別存放四個數碼管應顯示的編碼在DTABLE1中對應的位置
  19.        MOV BYTE PTR [SI],00H;內容s
  20.        MOV BYTE PTR [SI+2],09H;內容.
  21.        MOV BYTE PTR [SI+4],04H;內容c
  22.        MOV BYTE PTR [SI+6],05H;內容1
  23.        MOV BYTE PTR [SI+8],01H;內容E
  24.        MOV DX,MY8255_MODE;初始化8255工作方式
  25.        MOV AL,81H;方式0,A輸出(數碼管片選)、B口輸出(數碼管)、C口低四位輸入(按鍵),高四位輸出(步進電機)
  26.        OUT DX,AL
  27. KAISHI:
  28. MOV SI,3000H
  29. MOV DH,[SI+8]
  30. CMP DH,08H
  31. JA ZHI1;高于跳轉
  32. CMP DH,01H
  33. JB ZHI8;不高于跳轉
  34. JMP JIXU

  35. ZHI1:  MOV BYTE PTR[SI+8],01H
  36.        JMP JIXU
  37. ZHI8:  MOV BYTE PTR[SI+8],08H

  38. JIXU:   CALL KEYSCAN
  39.         MOV AH ,1;判斷是否有按鍵按下
  40.         INT 16H ;鍵盤服務
  41.         JZ  SFRUN;等于0,讀入字符,則跳轉
  42.         
  43. QUIT:  MOV  AX,4C00H
  44.        INT 21H
  45.       
  46. SFRUN:
  47. MOV SI,3000H
  48. MOV DH,[SI]
  49. CMP DH,01H
  50. JNZ JIXU;為0則跳轉
  51. MOV DH,[SI+4]
  52. CMP DH,04H
  53. JNZ ZIJIAN;不為4則跳轉
  54. INC BYTE PTR[SI+8]  ;地址si+8處的字節變量加1
  55. JMP RUN

  56. KAISHI1:  JMP KAISHI

  57. ZIJIAN :
  58. DEC BYTE PTR[SI+8]

  59. RUN:
  60. MOV AL,[SI+8]
  61. MOV BX,OFFSET DTABLE3
  62. AND AX,00FFH
  63. ADD BX,AX
  64. DEC BX
  65. MOV AL,[BX]
  66. MOV DX,MY8255_C
  67. OUT DX,AL
  68. DANG1:  MOV DH,[SI+6]
  69.         CMP DH,05H  ;1
  70.         JNZ DANG2
  71.         PUSH CX;cx的值壓入堆棧保存
  72.         MOV CX,10H;循環10次
  73. DA1:  CALL DALLY1  ;1檔速度
  74.       CALL DALLY
  75.       CALL DALLY1
  76.       CALL DALLY1
  77.       CALL DALLY1
  78.       CALL KEYSCAN
  79.       JMP KAISHI
  80.       
  81. DANG2:  CMP DH,06H;2
  82.         JNZ DANG3


  83. DA2:  CALL DALLY1  ;2檔速度
  84.       CALL DALLY1
  85.       CALL DALLY1
  86.       JMP KAISHI

  87. DANG3:  CMP DH,07H;3
  88.         JNZ DANG4
  89.         
  90.         
  91. DA3:  CALL DALLY1  ;3檔速度
  92.       CALL DALLY1
  93.       JMP KAISHI

  94. DANG4:  CMP DH,08H;4
  95.         JNZ KAISHI1
  96. DA4:  CALL DALLY1  ;4檔速度
  97.       CALL KEYSCAN
  98.       JMP KAISHI
  99.       


  100. DALLY1 PROC NEAR ;軟件延遲子程序
  101. PUSH CX
  102. PUSH AX
  103. MOV CX,00AFH
  104. D11:MOV AX,1000H         
  105. D22:  DEC AX
  106.       JNZ D22
  107.       PUSH CX;進棧
  108.       PUSH AX;進棧
  109.       CALL KEYSCAN
  110.       POP AX;出棧
  111.       POP CX;出棧
  112.       LOOP D11
  113.       POP AX;出棧
  114.       POP CX;出棧
  115.       RET;返回      
  116. DALLY1 ENDP

  117. KEYSCAN PROC NEAR;鍵盤掃描子程序
  118. BEGIN:
  119. CALL DIS;刷新
  120. CALL CLEAR;清屏
  121. CALL CCSCAN;掃描按鍵
  122. JNZ GETKEY1;有鍵按下則跳置 GETKEY1
  123. JMP GOBACK1

  124. GETKEY1:  CALL DIS;顯示刷新
  125.           CALL DALLY
  126.           CALL DALLY
  127.           CALL CLEAR;清屏
  128.           CALL CCSCAN;再次掃描按鍵
  129.           JNZ GETKEY2;有鍵按下則跳置 GETKEY2
  130.           JMP BEGIN;否則跳回開始繼續循環
  131.          
  132. GETKEY2:  MOV CH,0FEH;設置當前檢測的是第幾列
  133.           MOV CL,00H
  134.          

  135.          
  136. COLUM:   MOV AL,CH;選取一列,將x1~x4中一個置0
  137.          MOV DX,MY8255_A
  138.          OUT DX,AL
  139.          MOV DX,MY8255_C;讀y1~y4,用于判斷是哪一行按鍵閉合
  140.          IN AL,DX
  141. L1:  TEST AL,01H;是否為第 1 行
  142.      JNZ L2;不是則繼續判斷
  143.      MOV AL,00H;設置第 1 行第 1 列的對應的鍵值
  144.      JMP KCODE
  145. BEGIN1: JMP BEGIN
  146. L2:  TEST AL,02H;是否為第 2 行
  147.      JNZ L3;不是則繼續判斷
  148.      MOV AL,04H;設置第 2 行第 1 列的對應的鍵值
  149.      JMP KCODE
  150.      
  151. L3:  TEST AL,04H;是否為第 3 行
  152.      JNZ L4;不是則繼續判斷
  153.      MOV AL,08H;設置第 3 行第 1 列的對應的鍵值
  154.      JMP KCODE
  155.      
  156. L4:  TEST AL,08H;是否為第 4 行
  157.      JNZ NEXT;不是則繼續判斷
  158.      MOV AL,0CH;設置第 4 行第 1 列的對應的鍵值
  159.      
  160. KCODE:  ADD AL,CL;將第一列的值加上當前列數,等于按鍵值
  161.         CALL PUTBUF;保存按鍵值
  162.         PUSH AX
  163.         
  164. KON:;顯示刷新
  165. CALL DIS;等待按鍵彈起
  166. CALL CLEAR;清屏
  167. CALL CCSCAN;掃描按鍵,判斷按鍵是否彈起
  168. JNZ KON;未彈起則繼續循環等待彈起
  169. POP AX
  170. NEXT:
  171. INC CL;當前檢測的列數遞增
  172. MOV AL,CH
  173. TEST AL,08H;檢測是否掃描到第 4 列
  174. JZ BEGIN1;是則跳回到開始處
  175. ROL AL,1;沒檢測到第 4 列則準備檢測下一列
  176. MOV CH,AL
  177. JMP COLUM
  178. GOBACK1:  RET
  179. KEYSCAN ENDP
  180.          
  181. CCSCAN PROC NEAR;掃描是否有按鍵閉合子程序
  182. MOV AL,00H
  183. MOV DX,MY8255_A;將 4 列全選通,X1~X4 置 0
  184. OUT DX,AL
  185. MOV DX,MY8255_C
  186. IN AL,DX;讀 Y1~Y4
  187. NOT AL
  188. AND AL,0FH;取出 Y1~Y4 的反值
  189. RET
  190. CCSCAN ENDP
  191. CLEAR PROC NEAR ;清除數碼管顯示子程序
  192. MOV DX,MY8255_B ;段位置0即可清除數碼管顯示
  193. MOV AL,00H
  194. OUT DX,AL
  195. RET
  196. CLEAR ENDP
  197. DIS PROC NEAR ;顯示鍵值子程序
  198. PUSH AX ;AX入棧
  199. PUSH SI ;SI入棧,堆棧里保存了AX的0700,SI的3000
  200. MOV SI,3006H ;此處為3006H是先顯示的第四個管,下面SI DEC兩次即顯示第三個數碼管
  201. MOV DL,0F7H
  202. MOV AL,DL ;AL 0F7H
  203. AGAIN:
  204. PUSH DX ;DX入棧,堆棧里第一次是保存了DX的C4F7
  205. MOV DX,MY8255_A
  206. OUT DX,AL ;0F7H輸出到A口,設置x1~x4,選通一個數碼管
  207. MOV AL,[SI] ;SI指向一個緩沖區,取出緩沖區中存放鍵值在DTABLE1中的偏移量(05H)
  208. MOV BX,OFFSET DTABLE1 ;DTABLE1的偏移地址移入BX
  209. AND AX,00FFH ;AX與00FFH"按位與",和0相與清除,和1相與保留,保留了后8位
  210. ADD BX,AX ;DTABLE1的偏移地址加上鍵值的偏移量,即要輸出的數的地址
  211. MOV AL,[BX]
  212. MOV DX,MY8255_B
  213. OUT DX,AL ;寫入數碼管A~Dp
  214. CALL DALLY ;過程嵌套,調用DALLY1過程
  215. DEC SI
  216. DEC SI ;取下一個鍵值
  217. POP DX ;DX出棧
  218. MOV AL,DL ;DL中存放是否顯示完的標志
  219. TEST AL,01H ;判斷是否顯示完?
  220. JZ OUT1 ;顯示完,返回
  221. ROR AL,1 ;AL循環右移一位
  222. MOV DL,AL ;存放DL,相當于DL循環右移一位
  223. JMP AGAIN ;未顯示完,調回繼續

  224. OUT1:  POP SI ;SI出棧
  225.        POP AX ;AX出棧
  226.        RET
  227.        DIS ENDP

  228. PUTBUF PROC NEAR ;保存子鍵子程序
  229. MOV SI,3000H
  230. CMP AL,00H
  231. JNZ MODE
  232. DIR:
  233. CMP BYTE PTR[SI+4],03H
  234. JZ DIR1
  235. MOV BYTE PTR[SI+4],03H
  236. JMP LAST
  237. DIR1:
  238. MOV BYTE PTR[SI+4],04H
  239. JMP LAST
  240. MODE:
  241. CMP AL,01H
  242. JNZ STOP
  243. CMP BYTE PTR[SI],01H
  244. JZ MODE1
  245. MOV BYTE PTR[SI],01H
  246. JMP LAST
  247. MODE1:
  248. MOV BYTE PTR[SI],02H
  249. JMP LAST
  250. STOP:
  251. CMP AL,02H
  252. JNZ GRD1
  253. MOV BYTE PTR[SI],00H
  254. MOV BYTE PTR[SI+4],04H
  255. MOV BYTE PTR[SI+6],05H
  256. GRD1:
  257. CMP AL,04H
  258. JNZ GRD2
  259. MOV BYTE PTR[SI+6],05H
  260. GRD2:
  261. CMP AL,05H
  262. JNZ GRD3
  263. MOV BYTE PTR[SI+6],06H
  264. GRD3:
  265. CMP AL,06H
  266. JNZ GRD4
  267. MOV BYTE PTR[SI+6],07H
  268. GRD4:
  269. CMP AL,07H
  270. JNZ LAST
  271. MOV BYTE PTR[SI+6],08H
  272. LAST:
  273. CALL DIS
  274. CALL CLEAR
  275. CALL CCSCAN
  276. GOBACK:
  277. RET
  278. PUTBUF ENDP

  279. DALLY PROC NEAR ;軟件延遲子程序
  280.       PUSH CX
  281.       MOV CX,00FFH
  282. D1:
  283. MOV AX,00FFH
  284. D2:
  285. DEC AX
  286. JNZ D2
  287. LOOP D1
  288. POP CX
  289. RET
  290. DALLY ENDP
  291. CODE ENDS
  292.      END START
復制代碼


新建 Microsoft Word 文檔.doc

51 KB, 下載次數: 10, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:1 發表于 2018-9-7 16:53 | 只看該作者
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕在线观看日韩 | 婷婷91| 免费午夜电影 | 国产精品一区二区三区久久久 | 欧美久久不卡 | 久久久久久久久久久久一区二区 | 国产在线www | 久久久国产一区 | 9999视频| 久久久久国产一区二区 | 欧美天堂| 日本免费网 | 91精品国产91久久久久福利 | 你懂的国产 | 精品久久久久久亚洲综合网站 | 久草在线视频中文 | 日日夜夜精品视频 | 久久久久国产一区二区 | 99国产精品久久久久老师 | 国产在线观看不卡一区二区三区 | 男女羞羞视频免费看 | 国产精品欧美一区二区三区不卡 | 国产原创在线观看 | 午夜免费电影院 | 婷婷国产一区二区三区 | 成人亚洲网站 | 久久久.com| 欧美精品在线一区 | 午夜精品影院 | 精品欧美视频 | 夜夜夜夜夜夜曰天天天 | 欧美黄色一区 | 久久精品亚洲精品国产欧美 | 九九热这里只有精品在线观看 | 成人在线免费网站 | 国产三级在线观看播放 | 成人黄色av网站 | 国产精品成人一区二区 | 国产999在线观看 | 日本久久www成人免 成人久久久久 | 国产在线精品一区二区三区 |