標題: 求助51單片機舵機驅動匯編程序 [打印本頁]

作者: chydn2000    時間: 2024-12-13 16:26
標題: 求助51單片機舵機驅動匯編程序
讓舵機左轉動90度,輸出1ms脈沖,然后右轉動90度,輸出1.5MS脈沖,只使用延時可以嗎?我這樣編寫的,但有時候不能用。麻煩給姐說一下

作者: Tonghao666    時間: 2024-12-26 09:23
假設左轉90度和右轉90度對應的脈沖寬度1ms、PWM信號的周期為20ms,步驟:設置PWM信號的周期;根據(jù)所需的角度,設置PWM信號的高電平時間。

  1. ORG 0000H       ; 程序起始地址
  2. LJMP START      ; 跳轉到程序開始處
  3. ORG 000BH       ; 定時器0中斷向量地址
  4. LJMP TIMER0_ISR ; 跳轉到定時器0中斷服務程序
  5. START:
  6.     MOV TMOD, #01H       ; 設置定時器0為模式1(16位定時器)
  7.     MOV TH0, #0FCH       ; 定時器0高8位初值(假設周期為20ms)
  8.     MOV TL0, #66H        ; 定時器0低8位初值
  9.     SETB ET0             ; 使能定時器0中斷
  10.     SETB TR0             ; 啟動定時器0
  11.     CLR P1.0             ; 假設P1.0連接舵機控制信號; 左轉90度,輸出1ms脈沖
  12.     MOV R0, #1000        ; 假設1ms需要1000個機器周期(具體根據(jù)單片機時鐘頻率算)
  13.     LCALL DELAY_MS
  14.     SETB P1.0            ; 設置P1.0為高電平
  15.     MOV R0, #9999        ; 20ms - 1ms = 19ms,假設需要9999個機器周期
  16.     LCALL DELAY_MS
  17.     CLR P1.0             ; 清除P1.0為高電平; 右轉90度,輸出1.5ms脈沖
  18.     MOV R0, #1500        ; 假設1.5ms需要1500個機器周期
  19.     LCALL DELAY_MS
  20.     SETB P1.0            ; 設置P1.0為高電平
  21.     MOV R0, #9400        ; 20ms - 1.5ms = 18.5ms,假設需要9400個機器周期
  22.     LCALL DELAY_MS
  23.     CLR P1.0             ; 清除P1.0為高電平
  24.     SJMP $                   ; 無限循環(huán)
  25.     DELAY_MS:
  26.     MOV R1, R0           ; 將延時計數(shù)值存入R1
  27.     DJNZ R1, $           ; 延時循環(huán)
  28.     RET
復制代碼





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1