磁动力电子网-雕刻机DIY论坛,单片机论坛,CNCDIY,DIYCNC

 找回密码
 加入磁动力

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 485|回复: 13

[51单片机] [原创diy]试用51单片机ISP下载线

[复制链接]
发表于 2017-8-5 19:31:26 | 显示全部楼层 |阅读模式
本帖最后由 lxa0 于 2017-8-5 19:42 编辑

前几日在套包上买了一个51的ISP下载线
然后自己焊了一个试验板
用来做51单片机的试验

使用后发现
1。非常好用
2。非常节省时间
玩了几乎一辈子AT的51单片机
一直是用sp200s/300s之类的烧写器
没想到老都老了
居然能用上这么好的51开发工具
真是开心呀
回复

使用道具 举报

 楼主| 发表于 2017-8-5 19:33:09 | 显示全部楼层
下图左边的是自己焊接的试验板
新买的ISP.jpg




试验板的电路图
我的ISP试验图.jpg

回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-5 19:38:18 | 显示全部楼层
lxa0 发表于 2017-8-5 19:33
下图左边的是自己焊接的试验板

抓紧时间试验了一下51单片机“唱歌”唱的是生日快乐
边唱边闪光(led)

代码如下:

;2014-8-25初稿
;2017-8-4修改完成
;lxa0的生日快乐歌曲原代码
;ISP试验汇编代码
;由p1.4输出sg信号
;由p1.3输出音频信号
;11.0592MHz晶振




      ORG 0000H;
      AJMP mm;
      ORG 000BH;
      AJMP ttxx;


;程序入口***********************************************************      
ORG 0100H
mm:  nop
     mov sp,#5fh                  ;设堆栈入口
     MOV TMOD,#00010001B          ;2个定时器均为方式1
     MOV IE,#10000010B            ;开定时器T0中断和总中断
mm1: MOV DPTR,#TABLE              ;送查表首地址
mm2: CLR A            
      MOVC A,@A+DPTR              ;取数据
      MOV R1,A                    ;把数据放进r1
      INC DPTR                    ;取下一个数据
      CLR A
      MOVC A,@A+DPTR              ;取数据
      MOV R0,A
      INC DPTR                    ;取下一个数据
      ORL A,R1
      JZ XZF
      acall sg
                MOV A,R0
      ANL A,R1
      CJNE A,#0FFH,m0             ;数据取完否?
                AJMP mm1                    ;取完则返回继续循环取数据

m0:   MOV TL0,R0                     ;T0送初始值
      MOV TH0,R1
      SETB TR0                    ;启动T0
      CLR A
      MOVC A,@A+DPTR              ;取数据
      MOV R2,A
      INC DPTR                    ;取下一个数据
      AJMP DELAY                  ;开始发音

XZF:  setb p1.4
      CLR TR0                     ;休止符
      CLR A;
      MOVC A,@A+DPTR;
      MOV R2,A;
      INC DPTR;
DELAY:ACALL YS187MS               ;基本时长单位
      DJNZ R2,DELAY;
                AJMP mm2;

;T0中断子程序******************************************************
org 0200h
ttxx:MOV TL0,R0                   ;把r0的值装进T0低8位
     MOV TH0,R1                   ;把r1的值装进T0高8位
     CPL P1.3                     ;蜂鸣器驱动引脚p1.3取反
          RETI

;延时**************************************************************
YS187MS:SETB TR1;
     MOV R5,#100;         
YS11:MOV TL1,#LOW(65536-1870);
     MOV TH1,#HIGH(65536-1870);
YS22:JBC TF1,YS33;
     AJMP YS22;
YS33: DJNZ R5,YS11;
     CLR TR1;   
     RET;

;数据表*************************************************************
org 0300h
TABLE:   DB 0FDH,80H,03H, 0FDH,80H,01H;
         DB 0FDH,0C6H,04H, 0FDH,80H,04H;
         DB 0FEH,2AH,04H, 0FEH,02H,04H;
         DB 00H,00H,04H;
         DB 0FDH,80H,03H, 0FDH,80H,01H;
         DB 0FDH,0C6H,04H, 0FDH,80H,04H;
         DB 0FEH,5CH,04H, 0FEH,2AH,04H;
         DB 00H,00H,04H;
         DB 0FDH,80H,03H,0FDH,80H,01H;
         DB 0FEH,0C0H,04H, 0FEH,84H,04H;
         DB 0FEH,2AH,04H, 0FEH,02H,04H;
         DB 0FDH,0C6H,04H;
         DB 0FEH,98H,03H,0FEH,98H,01H;
         DB 0FEH,84H,04H,0FEH,2AH,04H;
         DB 0FEH,5CH,04H, 0FEH,2AH,04H;
         DB 00H,00H,04H;
         DB 0FFH,0FFH;

                        
;闪光灯代码*******************************************************
org 0400h
sg:push psw
clr psw.3                ;进入第1组工作寄存器
setb psw.4
clr p1.4
acall dys
acall dys
setb p1.4
pop psw
ret

dys:mov r4,#00h
mov r5,#04h
dys1:djnz r4,dys1
dys2:djnz r5,dys1
ret

cys:mov r6,#00h
mov r7,#0ffh
cys1:djnz r6,cys1
cys2:djnz r7,cys1
ret                        
                        
end      


回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-5 19:40:08 | 显示全部楼层
下个试验是51单片机做pwm发生器~~~~~~~~~~~~~完成后我会发资料到这里的
回复 支持 反对

使用道具 举报

发表于 2017-8-5 23:38:31 | 显示全部楼层
老是老点,能用就好

点评

感谢明兄支持!  发表于 2017-8-7 11:37
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-8 17:38:11 | 显示全部楼层
找了一个输出3路的pwm代码
略微的改了一下
还算过的去
先发上来供大家做个参考

DENG1 EQU P3.7       ;红灯输出口
DENG2 EQU P3.6       ;绿灯输出口
DENG3 EQU P3.5       ;蓝灯输出口
ld1 EQU 28H          ;红灯亮度,即占空比的比值,0-255变化
ld2 EQU 29H          ;绿灯亮度,即占空比的比值,0-255变化
ld3 EQU 2aH          ;蓝灯亮度,即占空比的比值,0-255变化


    ORG 0000H
    LJMP mm
    ORG 000BH
    LJMP t000
;主程序段*****************************************************************************
org 0100h
mm:nop
MOV SP,#5fH
MOV P1,#0FFH         ; P1置高,关闭全部灯
MOV 28h,#0ffH        ;给红灯赋值,00h为亮度最亮,0ffh为最暗
MOV 29h,#00H         ;给绿灯赋值
MOV 2ah,#080H        ;给蓝灯赋值
mov r1,28h           ;将红灯的赋值送进红灯缓存
mov r2,29h           ;将绿灯的赋值送进绿灯缓存
mov r3,2ah           ;将蓝灯的赋值送进蓝灯缓存
MOV TMOD,#02H        ;50us t0方式2自动重装
mov tcon,#00h
MOV TH0,#0bdH
MOV TL0,#0bdH
mov r7,#255          ;设定周期数据
SETB EA
SETB ET0
SETB TR0
mov 20h,#00h
m0:nop
acall pwm            ;改变红色子程序
sJMP m0
;定时器t0中断子程序<占用区0>********************************************************************
org 0180h
t000:                 ;50us t0中断子程序,用于实现三路PWM输出
PUSH ACC
PUSH PSW
CJNE R7,#00H,AA       ;从这里是程序的精华,检测R0值是否为0,等于0则下一条重新赋值14,否则跳到AA
MOV R7,#255           ;R0赋值#0ffh
setb 07h              ;设置改变pwm数据标志位
MOV R1,28h            ;把红灯亮度值复制给R1
MOV R2,29h            ;把绿灯亮度值复制给R2
MOV R3,2ah            ;把蓝灯亮度值复制给R3
AA:CJNE R1,#00H,BB    ;判断控制红灯的值是否(或是否被减为0)为0,是则下一条关闭红灯,否则跳到BB
SETB DENG1            ;关闭红灯
sJMP CC               ;跳到CC检测绿灯
BB:CLR DENG1          ;打开(或继续打开)红灯
DEC R1                ;R1数值减1
CC:CJNE R2,#00H,DD    ;这里控制绿灯与上面红灯原理一样
SETB DENG2
sJMP EE
DD:CLR DENG2
DEC R2
EE:CJNE R3,#00H,FF    ;这里控制蓝灯与上面的原理一样
SETB DENG3
sJMP GG
FF:CLR DENG3
DEC R3
GG: DEC R7            ;把R7的值减1,R0的初始值是#0ffh
POP PSW
POP ACC
RETI
;pwmr改变pwm时间子程序*****************************************************
org 0200h
pwm:jb 07h,pwm1       ;一个完整周期到否?
ret                   ;未到则返回
pwm1:push acc
jb 01h,pwm2           ;红色变到最大否?               
mov a,28h
cjne a,#0ffh,pwm41    ;未到最大则继续
setb 01h              ;到最大则设定标志位限制继续变大
sjmp pwm4
pwm41:inc 28h
sjmp pwm4
pwm2:mov a,28h
jz pwm3               ;红色到最小否?
dec 28h
sjmp pwm4
pwm3:clr 01h          ;到最小后清除变最大标志
pwm4:jb 02h,pwm5
mov a,29h
cjne a,#0ffh,pwm61
setb 02h
sjmp pwm6
pwm61:inc 29h
sjmp pwm6
pwm5:mov a,29h
jz pwm62
dec 29h
sjmp pwm6
pwm62:clr 02h
pwm6:jb 03h,pwm7
mov a,2ah
cjne a,#0ffh,pwm11
setb 03h
sjmp pwm10
pwm11:inc 2ah
sjmp pwm10
pwm7:mov a,2ah
jz pwm13
dec 2ah
sjmp pwm10
pwm13:clr 03h
pwm10:clr 07h
pop acc
ret   
end
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-8 17:38:55 | 显示全部楼层
本帖最后由 lxa0 于 2017-8-8 22:45 编辑

正在实验自己的pwm代码
实验好后就发上来

今天下午继续自己的pwm代码基本试验
正在进行 bug检查和调整


回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-15 21:12:38 | 显示全部楼层
自己写了一个pwm呼吸灯的代码
发现运行后会出现瞬间的闪烁
不知是何原因

现在把代码发上来
希望大家能帮助解决

;这是一个PWM汇编程序
;2017-8-15修改完成
;ISP试验汇编代码
;11.0592MHz晶振

DENG1 EQU P3.7       ;红灯输出口
ld1 EQU 10H          ;红灯亮度,即占空比的比值,0-255变化


    ORG 0000H
    LJMP mm
    ORG 000BH
    LJMP ttxx
    org 0023h
    ljmp cc

;程序入口*********************************************************      
org 0100h
mm:mov p3,#0
mov sp,#4fh            ;设堆栈入口50h
mov 20h,#00h           ;清除全部标志位
mov 30h,#05            ;给红灯赋值,00h为亮度最亮,0ffh为最暗
mov 34h,#250
mov 10h,30h
mov scon,#50h          ;设置串口方式1,允许串口接收
mov pcon,#00h          ;设置波特率9600
mov tcon,#00h
mov tmod,#22h          ;T0设方式2,T1方式2(自动重装)
mov th0,#0d2H          ;T0做50uS自动重装定时
mov tl0,#0d2H
mov th1,#0fdh          ;T1设初始值
mov tl1,#0fdh          ;TH1=TL1=#0fdh(波特率9600)
setb tr0               ;开T0定时器
setb tr1               ;开T1定时器
setb et0               ;开T0中断
setb ea                ;开总中断
setb es                ;开串口中断
setb p3.7              ;开p3.7口
mm0:acall pwm
sjmp mm0

;lxa0的定时器t0中断子程序<占用区0>********************************
org 0180h
ttxx:jb 00h,q2
djnz 10h,q3
clr p3.7
setb 00h
mov 10h,34h
reti
q2:djnz 10h,q3
setb p3.7
clr 00h
mov 10h,30h
q3:reti

;pwmr改变pwm时间子程序*********************************************
org 0200h
pwm:push psw
push acc
acall ys000
clr tr0
jb 07h,pwm2
djnz 30h,pwm3
setb 07h
pwm3:mov a,30h
cpl a
mov 34h,a
sjmp pwm5
pwm2:djnz 34h,pwm4
clr 07h
pwm4:mov a,34h
cpl a
mov 30h,a
pwm5:setb tr0
acall ys000
pop acc
pop psw
ret


;串口调速代码******************************************************
org 0300h
cc:nop
reti
;延时代码**********************************************************            
YS000:mov r7,#3         
ys1: mov r6,#00H
     djnz r6,$
     djnz r7,ys1
     ret

end
回复 支持 反对

使用道具 举报

发表于 2017-8-16 09:46:02 | 显示全部楼层
汇编语言,一看就头晕,

点评

继续修炼呀~~~~~~~~~~~~~~~~  发表于 2017-8-16 11:50
回复 支持 反对

使用道具 举报

发表于 2017-8-16 15:37:39 | 显示全部楼层
必须是S51或者S52才能下载啊,以前买的C51和C52还是要用编程器.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-17 23:58:43 | 显示全部楼层
是的!
因为以前我没有玩过这种下载线
回复 支持 反对

使用道具 举报

发表于 2018-6-2 11:02:02 | 显示全部楼层
上位机,ISP的固件,原理,大家动手搞一个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入磁动力

本版积分规则

QQ|小黑屋|手机版|Archiver|www.cdle.net 磁动力电子网 2001-2017 ( 粤ICP备10098153号

粤公网安备 44040402000001号

GMT+8, 2019-3-26 13:55

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.