8位LED流水灯电路图,流水灯电路图每1s切换一次

用定时器定时的方法控制8个LED流水灯,使流水灯循环流动点亮,时间间隔为1秒。1设置IE和TMOD的值2编写程序_百度知道
用定时器定时的方法控制8个LED流水灯,使流水灯循环流动点亮,时间间隔为1秒。1设置IE和TMOD的值2编写程序
用单片机的程序用AT89C51的谢谢
我有更好的答案
方法有很多的,给你一个,你可以调试一下,你可以通过不同的晶振去计算定时器初值,如果你懂定时器这部分很好调通的#include &reg51.h& #include &intrins.h& void main() {
TMOD=0x00; TH1=0x3c; TL1=0xb0; EA=1; ET1=1; TR1=1;
while(1) {
//下面写你要处理的的其他程序,你只要了定时1s。
}} } void a(void) interrupt 3 {
TH1=0x3c; TL1=0xb0; i++; }
采纳率:35%
为您推荐:
其他类似问题
流水灯的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。查看: 2538|回复: 2
【求助】一个按键控制八个流水灯的不同工作状态时,单片机一直处于中断状态
我想做的是:在不按键的情况下,八个LED流水灯形式工作;按键按下,第一个LED与第八个LED亮,然后第二个LED与第七个LED亮,以此类推。
现在的问题是,按键一次,切换成第二种工作状态,但是再按,就没办法切换到最初的流水灯形式,程序如下:
sbit run_flag = P3^2;
//延时函数,消除抖动
void Delay(uint16 count)
& & & & uint8
& & & & while(--count != 0)
& & & && & for(i=0;i&125;i++);
/*按键的判断转化成中断处理,按下按键则意味着一次中断事件发生,
& &单片机处理按键任务,即跳转到INT0中断处理程序中*/
void main()
& & & & IT0 = 1;&&//设置外部中断0触发方式位,1为边沿触发
& & & & EX0 = 1;&&//外部中断0中断允许位
& & & & EA = 1;&&//允许总中断标志位& & & && &
& & & & while(1)
& & & & & & & & if(run_flag==0)&&//判断运行标志位状态
& & & & & & & & {
& & & & & & & & & & & & P1=led_light1[i++];
& & & & & & & & & & & & Delay(50);
& & & & & & & & & & & & if(i==4) i=0;
& & & & & & & & }
& & & & & & & &
& & & & & & & & else
& & & & & & & & {
& & & & & & & & & & & & P1=led_light2[i++];&&//点亮LED流水灯
& & & & & & & & & & & & Delay(50);//点亮延时
& & & & & & & & & & & & if(i==8) i=0;
& & & & & & & & }
//中断程序
void int0() interrupt 0
//中断服务函数入口
& & & & EX0=0; & & & &&&//禁止INT0中断
& & & & i=0;
& & run_flag=~run_
& & & & EX0=1;&&// 允许INT0中断
我是初学者,还麻烦各位老师指点一下。卡在这个问题上好久了。谢谢
我简单看一下,很可能问题出在这一句 : run_flag=~run_
“~”这个是按位取反,应该用“!”,是”非“的意思。按位取反,也就是如果你给的初值是1,2进制的数就是,按位取反后就是,在if中中还是第二种情况成立。
还有一点:你的两种情况的流水等用的都是同一个全局变量“i”,如果第二种灯的i运行到i=7的时候,产生中断,执行第一只种灯,这时候传递到led_light1[i++]这个数组的就是8。就会超过这个数组的范围,而你下面的&&if(i==4) i=0;也不能把他变为0,所一两种改法:1、改成if(i&=4) i=0;并且放在刚进入那个IF的里面,第二中用两个变量。
回帖助人的奖励!
楼上的说得不对,!通常是用于判断用的,而不是赋值用,他的程序问题出现在sbit run_flag=P3^2;这里,这个是位定义,也就是说把p3.2这个引脚命名为run_flag,所以run_flag就跟P3.2的状态有关了,而不是跟程序有关,正确的写法是改成 bit run_
Powered by1688.com,阿里巴巴打造的全球最大的采购批发平台
1688/淘宝会员(仅限会员名)请在此登录
cbulogin.center.eu13Server is OKpic单片机控制LED8位流水灯探讨
09:58:20来源: eefocus 关键字:&&&&
1.最简单的点亮LED程序(C)
//实验目的:点亮RC0口的LED
//硬件设置:拨码开关S11的第8位置ON,其他各位关闭。
#include&&&&&&&&&&&&& //包含单片机内部资源预定义
&__CONFIG(0x1832);&&&&&&&&&&&
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
&#include&&&&&&&&&&& //包含单片机内部资源预定义
&#include&&&&&& //包含877A的头文件
&void main()&&&&&&&&&&&&&&& //主程序
&&& while(1)&&&&&&&&&&&&&&& //死循环,让RC0一直亮
&&&&&&&& TRISC=0&&&&&&& //RC0输出,其他输入
&&&&&&&& PORTC=0x01;&&&&&&& //RCO输出高电平,点亮LED
2.LED《霹雳灯》左移到第七位,再从第七位右移到第一位,再循环。(汇编)
;MCD1实战一,LED8位流水灯《霹雳灯》左移到第七位,再从第七位右移到第一位,再循环。
;该实战的目的作为学习和应用MCD1在线调试工具套件,进行项目的软件和硬件
;联合调试的范例程序,也就是当做一个用户程序实例,而演示板暂时充当用户电
;路的角色。这样就构成了一个软件、硬件齐全的自制项目模拟环境。
;本程序实现的功能是,把端口RC的8条引脚全部设置为输出模式,依次从引脚RC0
;到RC7送出高电平,然后再依次从引脚RC7到RC0送出高电平,并且周而复始,从而
;使得与该端口C相连的8只发光二极管LED循环依次点亮,其效果类似于一个简单的霹雳灯。
;该程序可用于PIC16F87X(A)所有系列
;PIC单片机学习网&&&http://www.pic16.com
;************************************************
;《霹雳灯》程序。文件名为&mcd-led1.ASM&
;**************************************************
& __CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭
;****************************************************
status&&& equ&& 3h&&&&&& ;定义状态寄存器地址
portc&&&& equ&&& 7h&&&&& ;定义端口C的数据寄存器地址
trisc&&&& equ&& 87h&&&&& ;定义端口C的方向控制寄存器地址
flag&&&&& equ&& 25h&&&&& ;定义一个控制左移/右移的标志寄存器
;***********************************************************
&&&&&& org&& 0000h&&&&& ;定义程序存放区域的起始地址
&&&&&& nop&&&&&&&&&&&& ;放置一条ICD必须的空操用指令
&&&&&& bsf&&&& status,5&&&&& ;设置文件寄存器的体1
&&&&&& movlw&& 00h&&&&&&& ;对端口C的方向控制码00H先送W
&&&&&& movwf&& trisc&&&&&& ;再由W转移到方向控制寄存器
&&&&&& bcf&&& status,5&&&&&& ;恢复到文件寄存器体0
&&&&&& movlw& 01h&&&&&&&& ;将B先送W
&&&&&& movwf& portc&&&&&&& ;再由W转移到数据寄存器
&&&&&& bsf&&&& flag,0&&&&& ;将左右移标志位置1,首先进行左移LED
&&&&&& bcf&&&& status,0&&&& ;将标志位C先清0
loop& btfss&&& status,0&&&&& ;测试进位/借位位,是1则修改标志
&&&&&& goto&&&& loop1&&&&&& ;是0则不修改标志
&&&&&& comf&&& flag,1&&&&&& ;FLAG的BIT0作为标志位,把它取反
loop1& btfss&&& flag,0&&&&&& ;判断标志位,是1则跳到循环左移
&&&&&& goto&&&& loop2&&&&&& ;是0则跳到循环右移
&&&&&& rlf&&&&&& portc,0&&&& ;循环左移端口C数据寄存器,结果送W
&&&&&& movwf&& portc&&&&&&& ;将结果再送回端口C的数据寄存器
&&&&&& goto&&&& loop3&&&&&&& ;跳过下面两条指令
loop2& rrf&&&&& portc,0&& ;循环右移端口C数据寄存器,结果送回W
&&&&&& movwf&& portc&&&& ;将结果再送回端口C的数据寄存器&& ;
loop3& call&&&&& delay&&&&&&&& ;调用廷时子程序
&&&&&& goto&&&&& loop&&&&&&&& ;返回
;-------------------------廷时子程序----------------------------
delay&&&&&&&&&&&&&&&&&&&&&& ;子程序名,也是子程序入口地址
&&&&&& movlw&& 0ffh&&&&&&&&& ;将外层循环参数值FFH经过W
&&&&&& movwf&& 20h&&&&&&&&& ;送入用作外循环变量的20H单元
lp0&&& movlw&& 0ffh&&&&&&&&& ;将内层循环参数值FFH经过W
&&&&&& movwf&& 21h&&&&&&&&&& ;送入用作内循环变量的21H单元
lp1&&& decfsz&& 21h,1&&&&&&&& ;变量21H内容递减,若为0跳跃
&&&&&& goto&&&& lp1&&&&&&&&&& ;跳转到LP1处
&&&&&& decfsz&&& 20h,1&&&&&&&& ;变量20H内容递减,若为0跳跃
&&&&&& goto&&&& lp0&&&&&&&&&& ;跳跃到LP0处
&&&&&& return&&&&&&&&&&&&&&&& ;返回主程序
&&&&&& end&&&&&&&&&&&&&&&&&& ;源程序结束
;****************************************************************
;&&& 进入该实战演练的工序流程如下:
;&&& 1.软硬件的安装:按照本说明书前面讲的&MPLAB-ICD的安装和使用&一节内介绍的方法操作即可.
;&&& 2.创建源文件和编辑源文件;在此介绍一种不同于前面讲的创建源文件的方法,用Windows附件中的&记事本&
;&& 这个为大家所熟知和好用的文件编辑器,并且可以方便的加入中文注释.不过有两点需要注意,一是注释前面的
;&& 分号&;&必须用西文半角输入;二是必须用&.asm&扩展名存储到事先建立的一个专用子目录下.
;&&& 3.打开MPLAB集成开发环境:首先在WINDOWS环境下,选用开始>程序>Microchip MPLAB>MPLAB命令,启动MPLAB
;&& 并进入MPLAB的桌面.
;&&& 4.创建项目:选用菜单File>New或Project>New Project,在事先建立的一个专用子目录下创建一个新项目,将
;&& 用记事本创建的源文件加入到该项目中.
;&&& 5.建立项目中的目标文件:选择菜单Project >Build All(项目>建立所有文件),MPLAB将自动调用MPASM将项目
;&& 文件管理下的源文件(.asm)汇编成十六进制的目标文件(.hex).
;&&& 6.ICD参数设置:通过菜单命令Project>Edit Project或者Option>Development Mode,将开发模式设置为
;&& &MPLAB ICD Debugger&,点击OK按钮,打开ICD的工作窗口,在调试阶段,可以按照说明书图2-10设置各项,但需注意
;&& OSCILLATOR应设置为XT方式,尤其需要说明的是,选中&Enable Debug Mode&(使能调试模式)选项,在向目
;&& 标单片机烧写机器码程序时,会将调试临控程序同时写入单片机的指定程序存储器区域,然后才允许用ICD方式调试。
;&&& 7.电路设置:将演示板的S1全部拔到ON,S4全部拔到OFF,S13的第5、第6、第7全部拔到OFF ,LCD不要插在演示板上,
;&& 以使端口C只与8只发光二极管接通;将用于选择频率的插针跳线插到&XT OSC&位置上.
;&&& 8.向目标单片机烧写目标程序:用户在点击功能按钮&Program&向目标单片机烧写机器码程序时,会等待一段时间,
;&& 并且在条状的状态信息栏中,出现提示信息。有一点需要引起注意,就是PIC16F87X单片机的FLASH程序存储器的擦写
;&& 周期是有限的,大约为1000次,应尽量节省它的使用寿命。
;&&& 9.运行和调试用户程序和用户电路:在各项参数设置好后,将ICD的工作窗口最小化,利用前面讲的&运行及调试&中介
;&& 绍的几种方法进行调试.当用自动单步方式调试时,建议临时禁止廷时子程序发挥作用,具体的方法是,可在CALL DELAY指
;&& 令前添加一个分号,并且重新汇编一次.为了学习目的,在调试过程中可以人为地加入一些软件漏洞(BUG)或硬件故障,来模
;&& 仿单片机端口引脚的片内或片外故障.
;&&& 10.定型烧写目标单片机;经过多次重复上述步骤的反复修改和调试,使得程序和电路在联机状态完全正常,这时可以进行
;&& 定型烧写,即将ICD窗口中的&Enable Debug Mode&(使能调试模式)选项消除,不再将调试临控程序写入单片机中.
;&&& 11.独立运行验收:上一步中的烧写过程完成后,即可将ICD模块和ICD仿真头(或演示板)之间的6芯电缆断开,让单片机在
;&& 演示板独立运行,观察实际效果.
LED8位流水灯《霹雳灯》左移到第七位,再从第七位右移到第一位,再循环。(汇编,另一种循环方法,通过改变C端口各位的输入输出方向来点亮流水灯。)
;LED流水灯的另一种实现方法
&;1、PORTC口,8个流水灯LED
;1、该程序首先把C口输出全0,然后通过改变输入输出方向来电亮流水灯。
;2、先从最低位电亮,点亮到最高位后,又从最高位开始点亮到最低位,如此循环。
;3、通过改变DELAY延时时间的长短可改变流水等点亮的速度。
;1、DEMO实验板作以下设置& s1拔到ON。
;2、S4,S5全部拔到OFF&&& LCD不要插在演示板上
;本实例原提供者:pic16论坛会员:学期班 ,在此鸣谢学前班同志共享本实例.
;由深圳市乾龙盛电子科技有限公司技术部钟闺田(工程师)(论坛网名:zhongruntian)验正并加于整理、注释.
;网站:PIC单片机学习网&http://www.pic16.com&& 讨论论坛:http://pic16.com/bbs/
;版权所有,转载请注明出处,并不能去掉或改变文件中的说明文字。
;程序文件名&LED.ASM&
;源程序如下:
;LIST&& P=16F877A&&& R=DEC
;OST&&& 4MHZ
;***********************************
;__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SPECIAL REGISTER
STATUS&&&&& EQU&&&&& 83H
RC&&&&&&&&& EQU&&&&& 07H
TRISC&&&&&& EQU&&&&& 87H
AB0&&&&&&&& EQU&&&&& 20H
AB1&&&&&&&& EQU&&&&& 21H
AB2&&&&&&&& EQU&&&&& 22H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;STATUS&& BIT
C&&&&&&&&&& EQU&&&&& 0
DC&&&&&&&&& EQU&&&&& 1
Z&&&&&&&&&& EQU&&&&& 2
RP0&&&&&&&& EQU&&&&& 5
RP1&&&&&&&& EQU&&&&& 6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PROGRAM ST
&&&&&&&&&&& ORG&&&&& 0000H&&&&&&&&&&&&&&&& ;复位地址
&&&&&&&&&&& NOP&&&&&&&&&&&&&&&&&&&&&&&&&&& ;放置一条MCD所需的空指令
&&&&&&&&&&& CLRF&&&&& RC&&&&&&&&&&&&&&&&&& ;所有C口输出为低,关闭所有显示
&&&&&&&&&&& BSF&&&&&& STATUS,5&&&&&&&&&&&& ;选体1
LOOP&&&&&&& MOVLW&&&& B';&&&&&&&&& ;先点亮RC0
&&&&&&&&&&& MOVWF&&&& TRISC&
&&&&&&&&&&& BCF&&&&&& STATUS,5&&&&&&&&&&&& ;回到体0
&&&&&&&&&&& MOVLW&&&& B';&&&&&&&&& ;所有输出为1,只要相应的位被设置为输出,即可点亮
&&&&&&&&&&& MOVWF&&&& RC
&&&&&&&&&&& CALL&&&&& DELAY&&&&&&&&&&&&&&& ;延时一段时间,保证LED的亮度
&&&&&&&&&&& BSF&&&&&& STATUS,5
&&&&&&&&&&& BSF&&&&&& STATUS,C
LOOP1&&&&&& RLF&&&&&& TRISC,F&&&&&&&&&&&&& ;点亮的位左移一位
&&&&&&&&&&& CALL&&&&& DELAY&&&&&&&&&&&&&&& ;延时
&&&&&&&&&&& BTFSC&&& STATUS,C&&&&&&&&&&&& ;判断是否点亮到了RC7& **********是btfsc,而非btfss*******************************
&&&&&&&&&&& GOTO&&&&& LOOP1&&&&&&&&&&&&&&& ;否,继续左移0
&&&&&&&&&&& MOVLW&&&& B';&&&&&&&&& ;是,点亮RC7位
&&&&&&&&&&& MOVWF&&&& TRISC
&&&&&&&&&&& CALL&&&&& DELAY&&&&&&&&&&&&&&&
&&&&&&&&&&& BSF&&&&&& STATUS,0
LOOP2&&&&&& RRF&&&&&& TRISC ,F&&&&&&&&&&&& ;点亮的位右移一位
&&&&&&&&&&& CALL&&&&& DELAY
&&&&&&&&&&& BTFSC&&&& STATUS,C&&&&&&&&&&&& ;是否点亮到最低位&&& **********是btfsc,而非btfss*******************************
&&&&&&&&&&& GOTO&&&&& LOOP2&&&&&&&&&&&&&&& ;否,继续右移
&&&&&&&&&&& GOTO&&&&& LOOP&&&&&&&&&&&&&&&& ;是,重新开始新一轮循环
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DELAY 0.12S
&&&&&&&&&&& MOVLW&&&& 0FFH
&&&&&&&&&&& MOVWF&&&& AB0
DELAY1&&&&& MOVLW&&&& 0DH
&&&&&&&&&&& MOVWF&&&& AB1
&&&&&&&&&&& MOVLW&&&& 0BH
&&&&&&&&&&& MOVWF&&&& AB2
&&&&&&&&&&& DECFSZ&&& AB2,F
&&&&&&&&&&& GOTO&&&&& DELAY3
&&&&&&&&&&& DECFSZ&&& AB1,F
&&&&&&&&&&& GOTO&&&&& DELAY2
&&&&&&&&&&& DECFSZ&&& AB0,F
&&&&&&&&&&& GOTO&&&&& DELAY1
&&&&&&&&&&& RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
&&&&&&&&&&& END&&&&&&&&&&&&&&&&&&&&&&&&&& ;源程序结束
;&&& 进入该实战演练的工序流程如下:
;&&& 1.创建源文件和编辑源文件;在此介绍一种不同于前面讲的创建源文件的方法,用Windows附件中的&记事本&
;&& 这个为大家所熟知和好用的文件编辑器,并且可以方便的加入中文注释.不过有两点需要注意,一是注释前面的
;&& 分号&;&必须用西文半角输入;二是必须用&.asm&扩展名存储到事先建立的一个专用子目录下.
;&&& 2.打开MPLAB集成开发环境:首先在WINDOWS环境下,选用开始>程序>Microchip MPLAB>MPLAB命令,启动MPLAB
;&& 并进入MPLAB的桌面.
;&&& 3.创建项目:选用菜单File>New或Project>New Project,在事先建立的一个专用子目录下创建一个新项目,将
;&& 用记事本创建的源文件加入到该项目中.
;&&& 4.建立项目中的目标文件:选择菜单Project >Build All(项目>建立所有文件),MPLAB将自动调用MPASM将项目
;&& 文件管理下的源文件(.asm)汇编成十六进制的目标文件(.hex).
4. LED8位流水灯《霹雳灯》左移到第七位,再从第七位右移到第一位,再循环。(汇编,第三种实现方式,利用左移的性质)
;改为一直循环左移
;************************************************
;**************************************************
& __CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭
;****************************************************
status&&& equ&& 3h&&&&&& ;定义状态寄存器地址
portc&&&& equ&&& 7h&&&&& ;定义端口C的数据寄存器地址
trisc&&&& equ&& 87h&&&&& ;定义端口C的方向控制寄存器地址
flag&&&&& equ&& 25h&&&&& ;定义一个控制左移/右移的标志寄存器
;***********************************************************
&&&&&& org&& 0000h&&&&& ;定义程序存放区域的起始地址
&&&&&& nop&&&&&&&&&&&& ;放置一条ICD必须的空操用指令
&&&&&& bsf&&&& status,5&&&&& ;设置文件寄存器的体1
&&&&&& movlw&& 00h&&&&&&& ;对端口C的方向控制码00H先送W
&&&&&& movwf&& trisc&&&&&& ;再由W转移到方向控制寄存器
&&&&&& bcf&&& status,5&&&&&& ;恢复到文件寄存器体0
&&&&&& movlw& 01h&&&&&&&& ;将B先送W
&&&&&& movwf& portc&&&&&&& ;再由W转移到数据寄存器
&&&&&& call&&&& delay&&&&&&& ;
&&&&&& bsf&&&& flag,0&&&&& ;将左右移标志位置1,首先进行左移LED
&&&&&& bcf&&&& status,0&&&& ;将标志位C先清0
&&&&&& rlf&&&&&& portc,0&&&& ;循环左移端口C数据寄存器,结果送W
&&&&&& movwf&&& portc&&&&&&& ;将结果再送回端口C的数据寄存器
&&&&&& call&&&& delay&&&&&&& ;
&&&&&& goto&&&& loop&&&&&&& ;跳过下面两条指令
;-------------------------廷时子程序----------------------------
delay&&&&&&&&&&&&&&&&&&&&&& ;子程序名,也是子程序入口地址
&&&&&& movlw&& 0ffh&&&&&&&&& ;将外层循环参数值FFH经过W
&&&&&& movwf&& 20h&&&&&&&&& ;送入用作外循环变量的20H单元
lp0&&& movlw&& 0ffh&&&&&&&&& ;将内层循环参数值FFH经过W
&&&&&& movwf&& 21h&&&&&&&&&& ;送入用作内循环变量的21H单元
lp1&&& decfsz&& 21h,1&&&&&&&& ;变量21H内容递减,若为0跳跃
&&&&&& goto&&&& lp1&&&&&&&&&& ;跳转到LP1处
&&&&&& decfsz&&& 20h,1&&&&&&&& ;变量20H内容递减,若为0跳跃
&&&&&& goto&&&& lp0&&&&&&&&&& ;跳跃到LP0处
&&&&&& return&&&&&&&&&&&&&&&& ;返回主程序
&&&&&& end&&&&&&&&&&&&&&&&&& ;源程序结束
;****************************************************************
;&&& 进入该实战演练的工序流程如下:
;&&& 1.软硬件的安装:按照本说明书前面讲的&MPLAB-ICD的安装和使用&一节内介绍的方法操作即可.
;&&& 2.创建源文件和编辑源文件;在此介绍一种不同于前面讲的创建源文件的方法,用Windows附件中的&记事本&
;&& 这个为大家所熟知和好用的文件编辑器,并且可以方便的加入中文注释.不过有两点需要注意,一是注释前面的
;&& 分号&;&必须用西文半角输入;二是必须用&.asm&扩展名存储到事先建立的一个专用子目录下.
;&&& 3.打开MPLAB集成开发环境:首先在WINDOWS环境下,选用开始>程序>Microchip MPLAB>MPLAB命令,启动MPLAB
;&& 并进入MPLAB的桌面.
;&&& 4.创建项目:选用菜单File>New或Project>New Project,在事先建立的一个专用子目录下创建一个新项目,将
;&& 用记事本创建的源文件加入到该项目中.
;&&& 5.建立项目中的目标文件:选择菜单Project >Build All(项目>建立所有文件),MPLAB将自动调用MPASM将项目
;&& 文件管理下的源文件(.asm)汇编成十六进制的目标文件(.hex).
;&&& 6.ICD参数设置:通过菜单命令Project>Edit Project或者Option>Development Mode,将开发模式设置为
;&& &MPLAB ICD Debugger&,点击OK按钮,打开ICD的工作窗口,在调试阶段,可以按照说明书图2-10设置各项,但需注意
;&& OSCILLATOR应设置为XT方式,尤其需要说明的是,选中&Enable Debug Mode&(使能调试模式)选项,在向目
;&& 标单片机烧写机器码程序时,会将调试临控程序同时写入单片机的指定程序存储器区域,然后才允许用ICD方式调试。
;&&& 7.电路设置:将演示板的S1全部拔到ON,S4全部拔到OFF,S13的第5、第6、第7全部拔到OFF ,LCD不要插在演示板上,
;&& 以使端口C只与8只发光二极管接通;将用于选择频率的插针跳线插到&XT OSC&位置上.
;&&& 8.向目标单片机烧写目标程序:用户在点击功能按钮&Program&向目标单片机烧写机器码程序时,会等待一段时间,
;&& 并且在条状的状态信息栏中,出现提示信息。有一点需要引起注意,就是PIC16F87X单片机的FLASH程序存储器的擦写
;&& 周期是有限的,大约为1000次,应尽量节省它的使用寿命。
;&&& 9.运行和调试用户程序和用户电路:在各项参数设置好后,将ICD的工作窗口最小化,利用前面讲的&运行及调试&中介
;&& 绍的几种方法进行调试.当用自动单步方式调试时,建议临时禁止廷时子程序发挥作用,具体的方法是,可在CALL DELAY指
;&& 令前添加一个分号,并且重新汇编一次.为了学习目的,在调试过程中可以人为地加入一些软件漏洞(BUG)或硬件故障,来模
;&& 仿单片机端口引脚的片内或片外故障.
;&&& 10.定型烧写目标单片机;经过多次重复上述步骤的反复修改和调试,使得程序和电路在联机状态完全正常,这时可以进行
;&& 定型烧写,即将ICD窗口中的&Enable Debug Mode&(使能调试模式)选项消除,不再将调试临控程序写入单片机中.
;&&& 11.独立运行验收:上一步中的烧写过程完成后,即可将ICD模块和ICD仿真头(或演示板)之间的6芯电缆断开,让单片机在
;&& 演示板独立运行,观察实际效果.
5. LED8位流水灯《霹雳灯》左移到第七位,再从第七位右移到第一位,再循环。(C,第三种实现方式,利用左移的性质)
//实验目的:本程序主要实现一个简单的流水灯程序
//即轮流点亮C口的8个灯(先点亮RC0,再熄灭RCO点亮RC1。。。。)
//硬件要求:拨码开关S11全部置ON。
#include&&&&&&&&&&&&& //包含单片机内部资源预定义
&__CONFIG(0x1832);&&&&&&&&
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
&void& delay();&&&&&&&&&&&&& //delay函数申明
&void main()&&&&&&&&&&&&&&&& //主函数
& while(1)&&&&&&&&&&&&&&&&&& //死循环,让C口流水灯一直工作
&&&&&&&&&&&&&&&&&&&&& //定义整型变量
&&& TRISC=0X00;&&&&&&&&&&&&& //C口定义为输出
&&& PORTC=0X01;&&&&&&&&&&&&& //点亮RCO口LED
&&& for(i=8;i>0;i--)&&&&&&& //循环左移7次
&&&&&&& delay();
&&&&&&& delay();&&&&&&&&&&&& //调用一定的延时程序,保证闪烁的速率
&&&&&&& PORTC=PORTC<RC7-->RC0)
void delay()&&&&&&&&&&&&&&&& //延时子程序
&&&&&&&&&&&&&&&&&&&&& //定义整型变量
& for(i=5000;i>0;i--)&&&&&
&&& {;}&&&&&&&&&&&&&&&&&&&&& //空函数,什么也不执行,只是消耗一定的时间
6.LED8位流水灯《霹雳灯》从0位开始左移,移到第七位时直接跳到零位,再左移,循环(汇编)
;改为从0位开始左移,移到第七位时直接跳到零位,再左移。
;**************************************************
& __CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭
;****************************************************
status&&& equ&& 3h&&&&&& ;定义状态寄存器地址
portc&&&& equ&&& 7h&&&&& ;定义端口C的数据寄存器地址
trisc&&&& equ&& 87h&&&&& ;定义端口C的方向控制寄存器地址
flag&&&&& equ&& 25h&&&&& ;定义一个控制左移/右移的标志寄存器
;***********************************************************
&&&&&& org&& 0000h&&&&& ;定义程序存放区域的起始地址
&&&&&& nop&&&&&&&&&&&& ;放置一条ICD必须的空操用指令
&&&&&& bsf&&&& status,5&&&&& ;设置文件寄存器的体1
&&&&&& movlw&& 00h&&&&&&& ;对端口C的方向控制码00H先送W
&&&&&& movwf&& trisc&&&&&& ;再由W转移到方向控制寄存器
&&&&&& bcf&&& status,5&&&&&& ;恢复到文件寄存器体0
loop2& movlw& 01h&&&&&&&& ;将B先送W
&&&&&& movwf& portc&&&&&&& ;再由W转移到数据寄存器
&&&&&& call&&&&& delay&&&&&&&& ;
bsf&&&& flag,0&&&&& ;将左右移标志位置1,首先进行左移LED
&&&&&& bcf&&&& status,0&&&& ;将标志位C先清0
loop& btfss&&& status,0&&&&& ;测试进位/借位位,是1则修改标志
&&&&&& goto&&&& loop1&&&&&& ;是0则不修改标志
&&&&&& comf&&& flag,1&&&&&& ;FLAG的BIT0作为标志位,把它取反
loop1& btfss&&& flag,0&&&&&& ;判断标志位,是1则跳到循环左移
&&&&&& goto&&&& loop2&&&&&& ;是0则跳回原处
&&&&&& rlf&&&&&& portc,0&&&& ;循环左移端口C数据寄存器,结果送W
&&&&&& movwf&& portc&&&&&&& ;将结果再送回端口C的数据寄存器
&&&&&& goto&&&& loop3&&&&&&& ;跳过下面两条指令
loop3& call&&&&& delay&&&&&&&& ;调用廷时子程序
&&&&&& goto&&&&& loop&&&&&&&& ;返回
;-------------------------廷时子程序----------------------------
delay&&&&&&&&&&&&&&&&&&&&&& ;子程序名,也是子程序入口地址
&&&&&& movlw&& 0ffh&&&&&&&&& ;将外层循环参数值FFH经过W
&&&&&& movwf&& 20h&&&&&&&&& ;送入用作外循环变量的20H单元
lp0&&& movlw&& 0ffh&&&&&&&&& ;将内层循环参数值FFH经过W
&&&&&& movwf&& 21h&&&&&&&&&& ;送入用作内循环变量的21H单元
lp1&&& decfsz&& 21h,1&&&&&&&& ;变量21H内容递减,若为0跳跃
&&&&&& goto&&&& lp1&&&&&&&&&& ;跳转到LP1处
&&&&&& decfsz&&& 20h,1&&&&&&&& ;变量20H内容递减,若为0跳跃
&&&&&& goto&&&& lp0&&&&&&&&&& ;跳跃到LP0处
&&&&&& return&&&&&&&&&&&&&&&& ;返回主程序
&&&&&& end&&&&&&&&&&&&&&&&&& ;源程序结束
;****************************************************************
;&&& 进入该实战演练的工序流程如下:
;&&& 1.软硬件的安装:按照本说明书前面讲的&MPLAB-ICD的安装和使用&一节内介绍的方法操作即可.
;&&& 2.创建源文件和编辑源文件;在此介绍一种不同于前面讲的创建源文件的方法,用Windows附件中的&记事本&
;&& 这个为大家所熟知和好用的文件编辑器,并且可以方便的加入中文注释.不过有两点需要注意,一是注释前面的
;&& 分号&;&必须用西文半角输入;二是必须用&.asm&扩展名存储到事先建立的一个专用子目录下.
;&&& 3.打开MPLAB集成开发环境:首先在WINDOWS环境下,选用开始>程序>Microchip MPLAB>MPLAB命令,启动MPLAB
;&& 并进入MPLAB的桌面.
;&&& 4.创建项目:选用菜单File>New或Project>New Project,在事先建立的一个专用子目录下创建一个新项目,将
;&& 用记事本创建的源文件加入到该项目中.
;&&& 5.建立项目中的目标文件:选择菜单Project >Build All(项目>建立所有文件),MPLAB将自动调用MPASM将项目
;&& 文件管理下的源文件(.asm)汇编成十六进制的目标文件(.hex).
;&&& 6.ICD参数设置:通过菜单命令Project>Edit Project或者Option>Development Mode,将开发模式设置为
;&& &MPLAB ICD Debugger&,点击OK按钮,打开ICD的工作窗口,在调试阶段,可以按照说明书图2-10设置各项,但需注意
;&& OSCILLATOR应设置为XT方式,尤其需要说明的是,选中&Enable Debug Mode&(使能调试模式)选项,在向目
;&& 标单片机烧写机器码程序时,会将调试临控程序同时写入单片机的指定程序存储器区域,然后才允许用ICD方式调试。
;&&& 7.电路设置:将演示板的S1全部拔到ON,S4全部拔到OFF,S13的第5、第6、第7全部拔到OFF ,LCD不要插在演示板上,
;&& 以使端口C只与8只发光二极管接通;将用于选择频率的插针跳线插到&XT OSC&位置上.
;&&& 8.向目标单片机烧写目标程序:用户在点击功能按钮&Program&向目标单片机烧写机器码程序时,会等待一段时间,
;&& 并且在条状的状态信息栏中,出现提示信息。有一点需要引起注意,就是PIC16F87X单片机的FLASH程序存储器的擦写
;&& 周期是有限的,大约为1000次,应尽量节省它的使用寿命。
;&&& 9.运行和调试用户程序和用户电路:在各项参数设置好后,将ICD的工作窗口最小化,利用前面讲的&运行及调试&中介
;&& 绍的几种方法进行调试.当用自动单步方式调试时,建议临时禁止廷时子程序发挥作用,具体的方法是,可在CALL DELAY指
;&& 令前添加一个分号,并且重新汇编一次.为了学习目的,在调试过程中可以人为地加入一些软件漏洞(BUG)或硬件故障,来模
;&& 仿单片机端口引脚的片内或片外故障.
;&&& 10.定型烧写目标单片机;经过多次重复上述步骤的反复修改和调试,使得程序和电路在联机状态完全正常,这时可以进行
;&& 定型烧写,即将ICD窗口中的&Enable Debug Mode&(使能调试模式)选项消除,不再将调试临控程序写入单片机中.
;&&& 11.独立运行验收:上一步中的烧写过程完成后,即可将ICD模块和ICD仿真头(或演示板)之间的6芯电缆断开,让单片机在
;&& 演示板独立运行,观察实际效果.
关键字:&&&&
编辑:什么鱼
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
关注eeworld公众号快捷获取更多信息
关注eeworld服务号享受更多官方福利
网友正在学习IC视频
EEWORLD网友正在观看&&视频
EEWORLD网友正在观看&&视频
EEWORLD网友正在观看&&视频
EEWORLD网友正在观看&&视频
EEWORLD网友正在观看&&视频
相关关键词
热门关键词
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

我要回帖

更多关于 单片机流水灯 的文章

 

随机推荐