-
Ordering information
Call us or mail us for inquiries & availability: info@mtronixtech.com
-
Search projects by Price
-
Project Categories
- Robots and Robotics
- GSM based Projects
- GPS based Projects
- RFID based Projects
- Energy Saving
- Wireless Communication
- DTMF based projects
- SMS based projects
- RF Remote
- Mobile Controlled
- Power Saver
- Sensor based Projects
- Alcohol Sensor
- heartbeat Sensor
- Humidity Sensor
- Infrared Sensor
- Level Sensor
- Light Sensor
- LPG Gas Sensor
- Moisture Sensor
- Temperature Sensor
- Vibration Sensor
- Weight Sensor
-
Search projects by Application
Project Videos:
Landrover Robot Operated by Cellphone
Industrial Automation using Cellphone
Password based door locking
Automatic room light controller
Temperature controlled fan
Electronic voting machine
Search by Components
89c51 89s51 89s52 89v51RD2 555 ADC0808 ADC0809 AT24c16 AT24c64 AT89s52 Battery BC547 Bulb Buzzer Darlington Pair DC motor Decoder EEPROM Fan GPS GSM IR LED Keypad L239D LCD Display LDR LED LM35 LM358 Matrix keypad MAX232 Motor Driver MQ6 PC Interface Relay RFID Card RFID Reader RFID Tags Sim300 sim900 SR86 SR87 Stepper Motor SYHS220 TSOP1738
Assembly code for DC Motor - PWM Pulse width Modulation
Sample code for DC Motor - PWM Pulse width Modulation.
Following code can be using for 8051 and 8052 ICs like: 89c51, 89c52, 89s51, 89s52, 89c2051.
;===================================================== ; Pin Definations ;===================================================== mot1for equ a0h ;address of Port 2.0 mot1rev equ a1h ;address of port 2.1 mot2for equ a2h ;address of port 2.2 mot2rev equ a3h ;address of port 2.3 ;===================================================== ; Main Program starts from here ;===================================================== call slowstart call slowstop here jmp here ;===================================================== ; Sub routines starts from here ;===================================================== slowstart: jnb 21h,mot2 ;goto mot2 if motor 2 is selected jnb 20h,rev_rise_on1 ;goto rev_rise_on1 if reverse direction is selected jnb 27h,slowstop_invert_dir ;if motor is in reverse dir stop motor&rotate forward jnb 26h,slowstart_ret ;if motor is in forward dir don't rotate forward again call mot1_for_start slowstart_ret ret slowstop_invert_dir call mot1_rev_stop call mot1_for_start ret rev_rise_on1 jnb 26h,slowstart_invert ;don't start if motor is in forward direction jnb 27h,slowstart_ret1 ;don't start if motor is in reverse direction call mot1_rev_start slowstart_ret1 ret slowstart_invert call mot1_for_stop call mot1_rev_start ret mot2 jnb 20h,mot2_rev jnb 29h,slowstart_inv jnb 28h,slowstart_ret2 call mot2_for_start slowstart_ret2 ret slowstart_inv call mot2_rev_stop call mot2_for_start ret mot2_rev jnb 28h,slowstart_inve jnb 29h,slowstart_ret3 call mot2_rev_start slowstart_ret3 ret slowstart_inve call mot2_for_stop call mot2_rev_start ret ;========================================================= slowstop jnb 21h,for_rise_off_mot2 jnb 20h,rev_rise_off_mot1 jb 22h,slowstop_ret call mot1_for_stop slowstop_ret ret rev_rise_off_mot1 jb 23h,slowstop_ret1 call mot1_rev_stop slowstop_ret1 ret for_rise_off_mot2 jnb 20h,rev_rise_off_mot2 jb 24h,slowstop_ret2 call mot2_for_stop slowstop_ret2 ret rev_rise_off_mot2 jb 25h,slowstop_ret3 call mot2_rev_stop slowstop_ret3 ret ;========================================================= mot1_for_start clr mot1for ;on period of pwm mov r2,30H djnz r2,$ setb mot1for ;off period of pwm mov r2,31H djnz r2,$ djnz r3,mot1_for_start ;repeat the loop 10 times mov r3,#10 mov a,30H add a,# 5 ;increment on period by 10 microsec mov 30H,a mov a,31H subb a,# 5 ;decrement off period by 10 microsec mov 31H,a djnz r4,mot1_for_start ;repeat the loop 20 times mov r4,#20 clr mot1for clr 22h ;sense stop key as mot1+for clr 26h ;motor1+rev ret ;========================================================= mot1_rev_start clr mot1rev ;on period of pwm mov r2,30H djnz r2,$ setb mot1rev ;off period of pwm mov r2,31H djnz r2,$ djnz r3,mot1_rev_start ;repeat the loop 10 times mov r3,#10 mov a,30H add a,# 5 ;increment on period by 10 microsec mov 30H,a mov a,31H subb a,# 5 ;decrement off period by 10 microsec mov 31H,a djnz r4,mot1_rev_start ;repeat the loop 20 times mov r4,#20 clr mot1rev clr 23h ;sense stop key as mot1+rev clr 27h ;mot1+for ret ;========================================================= mot2_for_start clr mot2for ;on period of pwm mov r2,30H djnz r2,$ setb mot2for ;off period of pwm mov r2,31H djnz r2,$ djnz r3,mot2_for_start ;repeat the loop 10 times mov r3,#10 mov a,30H add a,# 5 ;increment on period by 10 microsec mov 30H,a mov a,31H subb a,# 5 ;decrement off period by 10 microsec mov 31H,a djnz r4,mot2_for_start ;repeat the loop 20 times mov r4,#20 clr mot2for clr 24h ;sense stop key as mot2+for clr 28h ;mot2+rev ret ;========================================================= mot2_rev_start clr mot2rev ;on period of pwm mov r2,30H djnz r2,$ setb mot2rev ;off period of pwm mov r2,31H djnz r2,$ djnz r3,mot2_rev_start ;repeat the loop 10 times mov r3,#10 mov a,30H add a,# 5 ;increment on period by 10 microsec mov 30H,a mov a,31H subb a,# 5 ;decrement off period by 10 microsec mov 31H,a djnz r4,mot2_rev_start ;repeat the loop 20 times mov r4,#20 clr mot2rev clr 25h ;sense stop key as mot2+rev clr 29h ;mot2+for ret ;========================================================= mot1_for_stop clr mot1for ;on period of pwm mov r2,31H djnz r2,$ setb mot1for ;off period of pwm mov r2,30H djnz r2,$ djnz r3,mot1_for_stop ;repeat the loop 10 times mov r3,#10 mov a,30H add a,# 5 ;increment off period by 10 microsec mov 30h,a mov a,31h subb a,# 5 ;decrement on period by 10 microsec mov 31h,a djnz r4,mot1_for_stop ;repeat the loop 20 times mov r4,#20 setb mot1for setb 22h ;don't sense stop key if moh1+for is not started setb 26h ;if mot1+for then don't start mot1+rev ret ;========================================================= mot1_rev_stop clr mot1rev ; on period of pwm mov r2,31h djnz r2,$ setb mot1rev ;off period of pwm mov r2,30h djnz r2,$ djnz r3,mot1_rev_stop ;repeat the loop 10 times mov r3,#10 mov a,30h add a,# 5 ;increment off period by 10 microsec mov 30h,a mov a,31h subb a,# 5 ;decrement on period by 10 microsec mov 31h,a djnz r4,mot1_rev_stop ;repeat the loop 20 times mov r4,#20 setb mot1rev setb 23h ;don't sense stop key if mot1+rev is not started setb 27h ;if mot1+rev then don't start mot1+for ret ;========================================================= mot2_for_stop clr mot2for ;on period of pwm mov r2,31h djnz r2,$ setb mot2for ;off period of pwm mov r2,30h djnz r2,$ djnz r3,mot2_for_stop ;repeat the loop 10 times mov r3,#10 mov a,30h add a,# 5 ;increment off period by 10 microsec mov 30h,a mov a,31h subb a,# 5 ;decrement on period by 10 microsec mov 31h,a djnz r4,mot2_for_stop ;repeat the loop 20 times mov r4,#20 setb mot2for setb 24h ;don't sense stop key if mot2+for is not started setb 28h ;if mot2+for then don't start mor2+rev ret ;========================================================= mot2_rev_stop clr mot2rev ;on period of pwm mov r2,31h djnz r2,$ setb mot2rev ;off period of pwm mov r2,30h djnz r2,$ djnz r3,mot2_rev_stop ;repeat the loop 10 times mov r3,#10 mov a,30h ;increment off period by 10 microsec add a,# 5 mov 30h,a mov a,31h subb a,# 5 ;decrement on period by 10 microsec mov 31h,a djnz r4,mot2_rev_stop ;repeat the loop 20 times mov r4,#20 setb mot2rev setb 25h ;don't sense stop key if mot2+rev is not started setb 29h ;if mot2+rev then don't start mot2+for ret ;===================================================== ; Program ENDS here ;=====================================================