单片机学习也将近一个月了体会挺多的一直没时间写个总结,今天总算可以抽出点时间来写点东西了
了解单片机后感觉是在了解一些接口及使用时其会产生什么作用,其本质如何工作不得而知,听老师和学长说那得看模数电计算机组成原理(路还很长啊加把劲!) 还有就是在学习单片机的同时学会了汇编,用汇编代替c来写程序(汇编的效率比c还高可想而知汇编的效率有多多高,不过现在还是流行单片机c编程因为其逻辑结构明了而且比汇编看起来更易懂最重要的是容易上手,但一些高级人士是用汇编+c来写程序以达到完美),以上纯属瞎扯,看重点:
前面几个章节都比较简单讲的都是一些概念
下面就几个比较重要的章节来写点总结
《单片机之中断系统总结》
三个内部中断源 两个外部中断源
中断源 入口地址
外部中断0 0003H
T0溢出中断 000BH
外部中断1 0013H
T1溢出中断 001BH
串行口中断 0023H
1)设置IE EA %% % ES ET1 EX1 ET1 ET0 EX0
2)设置IP % % % PS PT1 PX1 PT0 PX0
3)若为外部中断,需设置触发方式.即设置TCON TF TR1 TF0 TR0 IE1 IT1 IE0 IT0
外部中断有两种方式: 0为电平触发方式 1为跳沿触发方式(在s5p2时采样int0或int1引脚 变化为高电平变为低电平则该外部中断被响应当然前提是该允许该中断请求即设置ie1或ie0)
自己写的一简单交通灯及出现紧急情况的处理代码:
中断用的是外部中断0方式是电平触发方式,由于我买的开发板找不到原理图了就不知道p3.2口接的是哪个开关(悲剧!)不过整体功能在开发板上都已实现了
挺高兴的,给出代码:
sred equ p1.0
sgreen equ p1.1
syellow equ p1.2
ered equ p1.3
egreen equ p1.4
eyellow equ p1.5
org 0000h
ljmp start
org 0003h
ljmp stop
start:mov sp,#50h
mov ie,#81h
mov ip,#01h
mov tcon,#02h
mov p1,#09h
loop: clr sgreen
setb sred
setb syellow
clr ered
setb eyellow
setb egreen
mov a,#05h
lcall delay0
mov r3,#05h
setb sgreen
loop1:cpl syellow
mov a,#02h
lcall delay0
djnz r3,loop1
loop2:clr sred
setb syellow
setb sgreen
clr egreen
setb eyellow
setb ered
mov a,#05h
lcall delay0
mov r3,#05h
setb egreen
loop3:cpl eyellow
mov a,#02h
lcall delay0
djnz r3,loop3
ljmp loop
stop: mov p1,#0f6h
reti
delay0:mov r4,a
delay: mov r7,#0d0h
delay1:mov r6,#0ffh
delay2:mov r5,#00ah
delay3:djnz r5,delay3
djnz r6,delay2
djnz r7,delay1
djnz r4,delay
ret
End
总结了下发现如下问题:
起初我设置的主程序入口的地址大于中断入口地址导致一直出现中断弄了半天也没调试出红绿灯的效果只出现中断效果,以后应该注意,
上午看了下书写了点总结和代码,下午调了一下程序实现了,花了点时间,不过找出了一些自己容易犯错的地方,也值了。
晚上写定时器/计数器的总结,待续……