编程日记.docx
《编程日记.docx》由会员分享,可在线阅读,更多相关《编程日记.docx(42页珍藏版)》请在冰豆网上搜索。
编程日记
前两天下载了PROTEUS软件,今天试着用了一下它的MCU仿真模块,同时,我在kell中谁手写了一个流水灯程序,结果啊,太令我失望了,就几行代码啊,大哥,自己都要搞错,
程序是严谨的东西,以后在编程方面要多加注意了。
ORG0000H
LJMPMAIN
ORG30H
MAIN:
clrc
mova,0feh------------------缺少一个#符号
A1:
MOVP1,A
lcalldelay
RrA
AJMPA1
DELAY:
MOVR7,#239
D1:
MOVR6,#239
D2:
DJNZR6,$
DJNZR7,D1
RET
END
Wednesday,July01,2009
继续玩proteus
做了一个定时器,然后在定时器的基础上通过自己思考,设计了一个交通灯
ORG0000H
AJMPMAIN
ORG30H
MAIN:
LOOP:
MOVP1,#21H
CALLDELAY
CALLDELAY
MOVP1,#11H
ACALLDELAY
MOVP1,#0CH
CALLDELAY
CALLDELAY
MOVP1,#0AH
CALLDELAY
AJMPLOOP
DELAY:
MOVR7,#250
D1:
MOVR6,#250
D2:
DJNZR6,D2
DJNZR7,D1
RET
END
简单易行。
在然后编写了两个有关计数器和中断使用的程序,其中对外部中断程序有特别了解,当有外部中断引入时,只能控制一个引脚的变化。
2今天刚看了一个关于串口通讯的程序,没想到,太没有想到了,竟然书上的内容还有错的,怎么调试都调试不出来。
后来想了一下自己写了一个关于串口通讯的程序。
但是实验的时候LED灯却乱跳,即使单步运行还是不能正确显示预期的结果。
开始还以为程序有问题,是自己没有能充分理解串口的使用,但是后来在源程序中加了个延迟程序,则实验成功。
ORG00H
LJMPMAIN
ORG30H
MAIN:
MOVSCON,#00H
MOVA,#80H
A1:
MOVSBUF,A
D1:
JNBTI,D1
RRA
CLRTI
ACALLDELAY
LJMPA1
DELAY:
MOVR0,#250
A3:
MOVR3,#250
A2:
DJNZR3,A2
DJNZR0,A3
RET
END
串口有点重要同时理解起来也有点困难,在网上下载了一个虚拟串口软件,成功做成了一个用串口发送接收数据的实验,有点点hai
原理图如下,实现的功能是串口4发送数据,串口3接受数据
此处的P1是串口3,串口4由串口调试软件给出
最后串口显示
用VT1的时候一定要记得打开VT1显示串口,要不是你一定看不到收到得结果。
我调试这个实验的时候一会成功一会不成功,起初还以为是电脑程序有问题,最后终于找到原因,就是没有打开虚拟终端窗口。
用了两天时间做了一个两个单片机的相互通信,起初是自己写程序,可是在PROTUES中不能正确仿真,后来借鉴别人的两个单片机通讯的程序,与自己的程序比较,程序很相近。
我该过去该过来,还是实现不了预期的目标,实在没有办法,我就照着别人的程序,一条一条的该自己的程序,结果还是不行,最后也没有发现到底是那一块出了问题。
也可能是有条语句错了吧,由于自己的粗心大意检查了好几遍都没有检查出来,以后对于写程序一定要小心了在小心。
必须先理解然后在敲进电脑。
也值得高兴,最后还是做出来了。
今天用proutes又成功的做了一个关于LCD显示的实验。
功夫不负有心人啊,说心里话,一开始接触单片机的时候就非常关注按键和显示那一部分内容,进行人机互动,觉得有意思。
起初点亮数数码管,叫数码管能按照自己想的数字显示数,后来就很想点亮LCD,可是看了不少的资料还是不很明白,反而感觉更加的糊涂了,不过我一直坚持一句话:
对于学习东西,看得懂的内容要多看,看不懂的内容要反复看,硬着头皮看,硬着头皮看。
现在终于点亮了,也算是小有成绩吧,鼓励一下自己。
不过要学的东西还很多,现在仅仅刚起步。
起初在proteus中把图连接好,把程序写好,按下仿真键,不能正常运行,还以为是程序有问题,或是连接图片有了问题,然后一一检查都没有错,郁闷啊,又像以前调试其他程序一样,进入了死循环,心里有点急,害怕又是面临调试一个程序花掉两三天的时间,(面对这样的问题真的很苦啊,第一次写程序,不能客观的肯定程序的正确性,在这种时候才体会到老师的重要作用)。
最后我改了一下,89c51的时钟频率,改的很低只有1mHZ,在仿真成功了。
以下是LCD显示程序
ORG00H
RSEQUP3.3;寄存器选择信号
RWEQUP3.4;读/写控制信号
EEQUP3.5;使能信号
COMEQU20H;命令字暂存单元
CLRRS
CLRRW
MOVP1,#30H;向LCD写入3条30H指令,使之复位
MOVR7,#03H
INT:
SETBE;使E产生下降沿
CLRE
CALLDELAY;延时大于4.1ms
DJNZR7,INT
MOVP1,#38H;工作方式设置命令字设置8位数据总线58点阵
SETBE;使E产生下降沿
CLRE
MOVCOM,#01H;清屏指令01H
CALLPR1;调向LCD写指令子程序
MOVCOM,#06H;设置输入方式命令字AC加1计数光标右移1个字符
CALLPR1
MOVCOM,#00001111B;显示开关控制命令字开显示光标显示闪烁
CALLPR1
MOVR6,#16;R6作字符计数器
MOVDPTR,#DATA1
MOVR4,#0
DISPLY:
CALLF_BUSY;调判忙子程序
MOVA,R4
MOVCA,@A+DPTR;取数
SETBRS;以下5条指令为向LCD写数
CLRRW
MOVP1,A
SETBE
CLRE
ACALLDELAY
INCR4
CJNER4,#0FH,NEXT;不到显示位置9转
MOVCOM,#0C0H;设置地址40H至AC,调整显示位置为9
CALLPR1
NEXT:
DJNZR6,DISPLY
SJMP$
PR1:
CALLF_BUSY;写指令子程序
CLRRW
MOVP1,COM
SETBE
CLRE
RET
F_BUSY:
CLRRS;判忙子程序
SETBRW
F_BY1:
MOVP1,#0FFH
SETBE
MOVA,P1
CLRE
JBACC.7,F_BY1;忙转
RET
DELAY:
MOVR0,#8H;延时子程序
DLY0:
MOVR1,#0C8H
DLY1:
DJNZR1,DLY1
DJNZR0,DLY0
RET
DATA1:
DB'CHENHAOGOOD'
END
会做矩阵式的按键,还以为独立式的按键很简单,就不用在做实验了,没想到,真失败啊。
今天无意间想做来耍一下,做一个独立式的按键实验,要求是,按下按键,当松开按键以后,指示灯亮,过一会指示灯又自动熄灭。
真以为很简单,结果动起手来就眼高手低了。
弄了小半天最后终于弄好了,通过这个实验给我启示一点,延时的设计很重要,不能谁便得选择延时,必须得经过计算。
因为单片机处理的时序是微妙级别的,而写的延时程序多加一个1或者多加一个循环说不好就让单片机多运行几天。
ORG00H
MAI:
JNBP1.0,A0
JNBP1.1,A1
LJMPMAI
A0:
ACALLDELAY
JNBP1.0,B0
LJMPMAI
B0:
JNBP1.0,B0
CLRP2.0
MOVR1,#100
C0:
ACALLDELAY
DJNZR1,C0
SETBP2.0
ljmpMAI
A1:
ACALLDELAY
JNBP1.1,B1
LJMPMAI
B1:
JNBP1.1,B1
CLRP2.1
MOVR1,#100
C1:
ACALLDELAY
DJNZR1,C1
SETBP2.1
LJMPMAI
DELAY:
MOVR6,#20;延时10ms子程序
L1:
MOVR7,#248
DJNZR7,$
DJNZR6,L1
RET
END
难得啊。
今天我终于LED点阵弄好了,又花了两三个小时,不过做成功了。
目的让8*8的LED点阵显示:
年:
字
在起初正确分辨出来了LED的行线和列线后。
然后就写显示年字的程序。
那个程序是在网上下载的。
编译没有问题。
最后我加载实验,结果竟然不行。
我还以为是把行列线弄错了。
我有仔细检查了一遍,没有问题,在仔细看一下,LED连线旁边的高低电平又是正确显示的。
然后我就想到是不是延迟那一块有问题。
改了延迟,可是还是不行。
最后我无意间该了两条相邻的指令的顺序。
结果就完成实验了。
ORG0H
START:
MOVDPTR,#DATA1;指向点阵代码首址
MOVR2,#11111110b;80H使第7列最左一列阴极为低电平
MOVR3,#08H
DISP:
mova,#0
MOVCA,@A+DPTR;取一列点阵代码
MOVP1,R2;使一列阴极为低电平
MOVP2,a;加至阳极就是交换了这两条指令
INCDPTR;指向下一列代码
MOVA,R2;R2右移一位为下一列阴极输出低电平作准备
RlA
MOVR2,A
acalldelay
DJNZR3,DISP;8列未完,转
AJMPSTART
DELAY:
MOVR6,#20;延时10ms子程序
L1:
MOVR7,#10
DJNZR7,$
DJNZR6,L1
RET
DATA1:
DB24H,44H,0DCH,54H,7FH,54H,54H,44H;年的点阵代码
END
2009年8月15日星期六
一键多功能识别
目的。
按一下按键,一个LED等闪烁,再按一下按键下一个LED等闪烁
程序如下
IDEQU30H
K1BITP3.7
L1BITP1.0
L2BITP1.1
L3BITP1.2
L4BITP1.3
ORG00H
MOVID,#00H
START:
JBK1,REL
CALLDELAY10MS
JBK1,REL
INCID
MOVA,ID
CJNEA,#04H,REL
MOVID,#00H
REL:
JNBK1,$
MOVA,ID
CJNEA,#00H,IS0
CPLL1
LCALLDELAY
LCALLDELAY
SETBL1
LCALLDELAY
LCALLDELAY
SJMPSTART
IS0:
CJNEA,#01H,IS1
CPLL2
CALLDELAY
LCALLDELAY
SETBL