欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2079|回復: 1
收起左側(cè)

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

[復制鏈接]
ID:394934 發(fā)表于 2018-9-7 12:34 | 顯示全部樓層 |閱讀模式
單片機步進電機課程設(shè)計
可實現(xiàn)調(diào)速以及正反轉(zhuǎn)等功能
  1. IOY0  EQU  3000H  ;片選IOY0 對應(yīng)的端口始地址
  2. MY8255_A  EQU  IOY0+00H*4  ;8255 的 A 口地址,輸出,鍵盤列選
  3. MY8255_B  EQU  IOY0+01H*4  ;8255 的 B 口地址,輸出,數(shù)碼管編碼
  4. MY8255_C  EQU  IOY0+02H*4  ;8255 的 C 口地址,低四位,讀鍵盤行號,高四位輸出,控制步進電機
  5. MY8255_MODE  EQU  IOY0+03H*4  ;8255的控制寄存器地址

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

  9. DATA  SEGMENT
  10. DTABLE1   DB  6DH,79H,73H,77H,39H,06H,5BH,4FH,66H,80H  ;這十個分別表示的數(shù)碼管顯示是 5,E,P,A,C,1,2,3,4,.
  11. DTABLE3   DB  10H,30H,20H,60H,40H,0C0H,80H,90H  ;歩進電機正向轉(zhuǎn)速表
  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;建立緩沖區(qū),存放要顯示的鍵值
  18. ;[SI][SI+2][SI+4][SI+6]中分別存放四個數(shù)碼管應(yīng)顯示的編碼在DTABLE1中對應(yīng)的位置
  19.        MOV BYTE PTR [SI],00H;內(nèi)容s
  20.        MOV BYTE PTR [SI+2],09H;內(nèi)容.
  21.        MOV BYTE PTR [SI+4],04H;內(nèi)容c
  22.        MOV BYTE PTR [SI+6],05H;內(nèi)容1
  23.        MOV BYTE PTR [SI+8],01H;內(nèi)容E
  24.        MOV DX,MY8255_MODE;初始化8255工作方式
  25.        MOV AL,81H;方式0,A輸出(數(shù)碼管片選)、B口輸出(數(shù)碼管)、C口低四位輸入(按鍵),高四位輸出(步進電機)
  26.        OUT DX,AL
  27. KAISHI:
  28. MOV SI,3000H
  29. MOV DH,[SI+8]
  30. CMP DH,08H
  31. JA ZHI1;高于跳轉(zhuǎn)
  32. CMP DH,01H
  33. JB ZHI8;不高于跳轉(zhuǎn)
  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 ;鍵盤服務(wù)
  41.         JZ  SFRUN;等于0,讀入字符,則跳轉(zhuǎn)
  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則跳轉(zhuǎn)
  51. MOV DH,[SI+4]
  52. CMP DH,04H
  53. JNZ ZIJIAN;不為4則跳轉(zhuǎn)
  54. INC BYTE PTR[SI+8]  ;地址si+8處的字節(jié)變量加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;循環(huán)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;否則跳回開始繼續(xù)循環(huán)
  131.          
  132. GETKEY2:  MOV CH,0FEH;設(shè)置當前檢測的是第幾列
  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;不是則繼續(xù)判斷
  143.      MOV AL,00H;設(shè)置第 1 行第 1 列的對應(yīng)的鍵值
  144.      JMP KCODE
  145. BEGIN1: JMP BEGIN
  146. L2:  TEST AL,02H;是否為第 2 行
  147.      JNZ L3;不是則繼續(xù)判斷
  148.      MOV AL,04H;設(shè)置第 2 行第 1 列的對應(yīng)的鍵值
  149.      JMP KCODE
  150.      
  151. L3:  TEST AL,04H;是否為第 3 行
  152.      JNZ L4;不是則繼續(xù)判斷
  153.      MOV AL,08H;設(shè)置第 3 行第 1 列的對應(yīng)的鍵值
  154.      JMP KCODE
  155.      
  156. L4:  TEST AL,08H;是否為第 4 行
  157.      JNZ NEXT;不是則繼續(xù)判斷
  158.      MOV AL,0CH;設(shè)置第 4 行第 1 列的對應(yīng)的鍵值
  159.      
  160. KCODE:  ADD AL,CL;將第一列的值加上當前列數(shù),等于按鍵值
  161.         CALL PUTBUF;保存按鍵值
  162.         PUSH AX
  163.         
  164. KON:;顯示刷新
  165. CALL DIS;等待按鍵彈起
  166. CALL CLEAR;清屏
  167. CALL CCSCAN;掃描按鍵,判斷按鍵是否彈起
  168. JNZ KON;未彈起則繼續(xù)循環(huán)等待彈起
  169. POP AX
  170. NEXT:
  171. INC CL;當前檢測的列數(shù)遞增
  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 ;清除數(shù)碼管顯示子程序
  192. MOV DX,MY8255_B ;段位置0即可清除數(shù)碼管顯示
  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兩次即顯示第三個數(shù)碼管
  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口,設(shè)置x1~x4,選通一個數(shù)碼管
  207. MOV AL,[SI] ;SI指向一個緩沖區(qū),取出緩沖區(qū)中存放鍵值在DTABLE1中的偏移量(05H)
  208. MOV BX,OFFSET DTABLE1 ;DTABLE1的偏移地址移入BX
  209. AND AX,00FFH ;AX與00FFH"按位與",和0相與清除,和1相與保留,保留了后8位
  210. ADD BX,AX ;DTABLE1的偏移地址加上鍵值的偏移量,即要輸出的數(shù)的地址
  211. MOV AL,[BX]
  212. MOV DX,MY8255_B
  213. OUT DX,AL ;寫入數(shù)碼管A~Dp
  214. CALL DALLY ;過程嵌套,調(diào)用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循環(huán)右移一位
  222. MOV DL,AL ;存放DL,相當于DL循環(huán)右移一位
  223. JMP AGAIN ;未顯示完,調(diào)回繼續(xù)

  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, 下載次數(shù): 10, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:1 發(fā)表于 2018-9-7 16:53 | 顯示全部樓層
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表