|
楼主 |
发表于 2012-6-6 12:38:32
|
显示全部楼层
还有单片机的源代码,不懂C,只能用汇编写的。
;这是一个使用单片机通过NUL2003驱动步进电机程序.
;步进电机: 5伏,500MA/STEP,四线四拍.
;将步进电机的A B C D四个绕组连接到"步进电机"的A,B,C,D,将公用抽头并接在VCC上.
BUFF_STEP EQU 31H
POSITION EQU 32H
SW1 BIT P1.5
SW2 BIT P1.6
SMG1 EQU P1.0 ;定义数码管阳级控制脚,第一个
SMG2 EQU P1.1 ;定义数码管阳级控制脚,第二个
ORG 000h
JMP START
ORG 0023H
AJMP RECEIVE ;跳转到接收中断入口
;----------------------------------------
;-----------数据存放----------------------
ORG 0100H
TABLE: DB 0C0h,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH;表:共阳数码管 0-9 A-F
TAB_CW: DB 11111011B,11101011B,11101111B,11100111B,11110111B,11010111B,11011111B,11011011B ;正转相序 a橙 b黄 c黑 d棕 com红
TAB_CCW: DB 11011111B,11010111B,11110111B,11100111B,11101111B,11101011B,11111011B,11011011B ;反转相序
;-----------------------------------------------
ORG 300H
START:
MOV BUFF_STEP,#00H
MOV P0,#0fFh ;初始化MCU端口
MOV P1,#0ffh
MOV P3,#0ffh
MOV P2,#0ffH
MOV A,#00H ;初始化寄存器
MOV PSW,#00H
MOV IE,#00H
MOV SP,#80H
MOV POSITION,#40H
MOV TMOD,#20H ;T1工作方式2
MOV TH1,#0FDH ;波特率9600
MOV SCON,#50H ;传口工作方式1,允许中断接受
SETB EA ;打开总中断
SETB ES ;打开串口中断
SETB TR1 ;打开定时器1
MAIN:
MOV A,POSITION
LCALL DISPLAY
LJMP MAIN
RECEIVE:
CLR RI
MOV A,SBUF ;串口接收数据
MOV R0,A
PANDUAN:MOV A,R0
CJNE A,#40H,ZHUAN ;判断A是否等于40H,等于则停止转动,程序返回。
LJMP TING
ZHUAN: ;转动
JC ZZHUAN
;反转
LCALL FZ
INC POSITION
DEC R0
LJMP PANDUAN
ZZHUAN: ;正转
LCALL ZZ
DEC POSITION
INC R0
LJMP PANDUAN
TING: MOV A,POSITION ;停止转动后返回当前位置
MOV SBUF,A ;将数据传送给计算机
JNB TI,$
CLR TI
RETI
;正转8拍子程序=======================
ZZ:
MOV DPTR,#TAB_CW
MOV A,BUFF_STEP
MOVC A,@A+DPTR
MOV P2,A
MOV P3,A
MOV A,POSITION
LCALL DISPLAY
INC BUFF_STEP
MOV A,BUFF_STEP
CJNE A,#08H,ZZ
MOV BUFF_STEP,#00H
RET
;反转8拍子程序===================
FZ:
MOV DPTR,#TAB_CCW
MOV A,BUFF_STEP
MOVC A,@A+DPTR
MOV P2,A
MOV P3,A
MOV A,POSITION
LCALL DISPLAY
INC BUFF_STEP
MOV A,BUFF_STEP
CJNE A,#08H,FZ
MOV BUFF_STEP,#00H
RET
;显示A子程序==================
DISPLAY:
PUSH ACC
MOV DPTR,#TABLE ;数码管显示子程序
MOV B,#16
DIV AB
CLR SMG1 ;选择十位数码管
MOVC A,@A+DPTR ;查表输出定义好的数码管段值与P0口,显示相应的0-9
MOV P0,A
LCALL DELAY ;延时,停留一会,让人眼感触到它的亮度
MOV P0,#0FFH ;清除数码管显示,因是共阳型,所以不是0
SETB SMG1 ;关闭十位数码管
CLR SMG2 ;选择个位数码管
MOV A,B ;个位显示
MOVC A,@A+DPTR ;查表输出定义好的数码管段值与P0口,显示相应的0-9
MOV P0,A
LCALL DELAY ;延时,停留一会,让人眼感触到它的亮度
MOV P0,#0FFH ;清除数码管显示,因是共阳型,所以不是0
SETB SMG2 ;关闭个位数码管
POP ACC
RET
;延时子程序=================================
DELAY:
MOV R6,#4
DEL0: MOV R7,#255
DJNZ R7,$
DJNZ R6,DEL0
RET
END
|
|