中国石凳联盟 登录注册

【转贴】大家来玩MCU◎ ---(0001:运行我的第一个程序)

rockage··0 回复·240 浏览

发表回复
http://erji.net/attachment/Mon_0710/6_37069_d26e502e72727ce.jpg http://erji.net/attachment/Mon_0710/6_37069_927f3dd27df8ee2.jpg http://erji.net/attachment/Mon_0710/6_37069_0ccd8674043d0d7.jpg http://erji.net/attachment/Mon_0710/6_37069_40de66fe517336e.jpg http://erji.net/attachment/Mon_0710/6_37069_e635d7611f1523a.jpg

【关键词】创建Project、汇编、DEBUG运行、
有了仿真调试器和评估板,解决了MPLAB IDE的安装困扰,我们就可以进入软件调试运行的小天地啦!
进入这个小天地,不要被那些犹如“天书”般的程序代码所迷惑。让我们“先玩为快”,来试试RUNING我们的第一个程序:MYFIRST.ASM吧:
程序虽然简单,但是为了避免输入打字差错和节省时间,建议大家在这里下载源代码:
论坛上程序的排版也比较乱,大家也可以下载本讲的文本文件。
id=2049star=1#2049" target=_blank

http://www.little-tube.com/bbs/dispbbs.asp?boardid=3id=2049star=1#2049


◎准备工作:
1)用小一字螺丝刀把四个数码管拆下(本程序还用不上数码管);
2)把评估板的4位DIP开关拨到ON的位置。

◎在MPLAB IDE上建立你的Project:
1)在你的电脑建立一个文件夹(例如C:MY MCU)
2)把下载的MYFIRST.ASM copy到这个文件夹里
3)打开MPLAB ICD v7.60
4)点击进入Project的“Project Wizard”
5)“下一步”Device 栏目里上/下拉选择PIC16F873A
6)“下 一步”(请看截图1:软件工具选择)
7)在Create New Project File 点Browse,找到路径C:MY MUC 填入MYFIST
在下面一个Browse里在同样路径也填入MYFIRST
8)在Add existing files to your projict里面,找到MYFIRST.ASM 点击Add添加
9)下一步给出一个Summary点击“完成”,就进入IDE工作界面了(见截图2)。
10)在Configure里面先把Configuration Bits set in code 那个“勾”去掉,按我的截图3“Configure选择”设置好
11)在Debugger里面选择工具:“1 MPLAB ICD 2”,这时候就完成了调试设置,一个Project就建好了。

◎汇编,运行程序:
1)在弹出的“MYFIRST.mcw”框里,点击Source Files 下的MYFIRST.ASM文件,整个源程序文件就会打开
2)点击汇编工具条(Build All图框),就会开始汇编
3)点击下载工具条(Program target device图框),就把汇编好的目标代码下载到芯片了
4)点击运行(右三角Run图标),程序就开始运行了(以上四步骤,请参见截图:汇编运行)
5)以后要再次打开这个Project来修改,运行,只需要在Project选项里面选择“OPEN”,再打开目录中的MYFIRST.mcp就行了。

◎脱机运行:
1)在Debugger里面选择工具:“None”(无工具),退出Debugger界面
2)在Programmer里面选择工具:“2 MPLAB ICD 2”
3)这时候界面进入到编程界面
4)点击下载工具条(Program target device图框),就把汇编好的目标代码烧写到芯片了
5)把6芯电话插头从评估板拔出,程序就可以脱开仿真调试器运行了。





TITLE MYFIRST_DEMO_1 PROGRAM
(C) copyright by Little Dot CO,.LTD.
DESIGN DATE BEGIN: 2007/10/15
FINISH: 2007/10/15 (V1.0)
Programan: My
================================================= 以上这是写给自己看的文件头,作为一个良好编程习惯应该有的。
本程序是一个演示MCU的I/O端口输入、输出的示范程序,
当四个开关K1~K4任意按下时,相应的LED1~LDE4就会点亮
程序虽然简单,但是也说明MCU能够知道你要它干什么活儿了。

list p=16f873A 这是告诉汇编器我们选用的芯片型号

#include p16f873a.inc 这是调用系统附带的初始化文件,用来定义特殊寄存器的“房间” 由于在特定的MCU里,这些“房间号码”都是固定的,所以直接引用就是了

***********************************************
* Variable definitions * 这些就是我们在程序中要用到的变量了
*********************************************** 以下分别定义了按钮四个开关和四个LED的Bit位
K1 EQU .2 PORTA 的第2端口
K2 EQU .3 PORTA 的第3端口
K3 EQU .4 PORTA 的第4端口
K4 EQU .5 PORTA 的第5端口
LED1 EQU .3 PORTB 的第3端口
LED2 EQU .2 PORTB 的第2端口
LED3 EQU .1 PORTB 的第1端口
LED4 EQU .0 PORTB 的第0端口
MCU的端口都是很灵活的,具体用那一个做什么往往我们根据电路板排列
************************************************* 以及端口的性能来决定,例如有些功能A端口有,B端口没有,那就只能用A

ORG 0X00 ORG是一条伪指令,用来设定程序从程序存储器的0X00地址开始存储和执行
NOP NOP 是一条空操作指令,不做什么事情,磨蹭一下而已
GOTO INIT_START 跳转到初始化程序段执行,因为接下来的房间,是用来存放将来会用到的中断 入口的

ORG 0X07 又是一条伪指令,表示下面的程序从0X07开始
INIT_START
CLRF PORTA 初始化端口A ,分配那个端口作为输入,那个做输出
BSF STATUS,RP0
MOVLW B00111100 RA0-3 INPUT 分配端口A的2、3、4、5端口为输入口,对应于我们的四个按键
MOVWF TRISA
MOVLW B10000110 Select all digital
MOVWF ADCON1
BCF STATUS,RP0
CLRF PORTB 初始化端口B ,分配那个端口作为输入,那个做输出
BSF STATUS,RP0
MOVLW B11110000 RB0-3 OUTPUT 分配端口B的0~3为输出口,对应于我们的4个LED
MOVWF TRISB
BCF STATUS,RP0
MOVLW 0X3C 给端口A赋值:0X3C = 二进制的00111100使得我们的按键电位拉高
MOVWF PORTA
MOVLW 0X0F 给端口B赋值:0X0F = 二进制的00001111使得我们LED一开始是灭的
MOVWF PORTB
========================================
Main_Loop:
NOP

TEST_K1:
BTFSC PORTA,K1 判断K1是否按下?(按下:端口A2是低电平,没有按:是高电平)
GOTO TK_1
BCF PORTB,LED1 如果按下,就点亮LED1,请注意,这里用PNP管作为驱动管,低电位点亮
GOTO TEST_K2
TK_1: BSF PORTB,LED1 如果没有按下,就在端口B3输出高电平,关闭LED1
TEST_K2:
BTFSC PORTA,K2 下面的程序段和K1,LED2完全一样,只是处理的按键和LED不同而已。
GOTO TK_2
BCF PORTB,LED2
GOTO TEST_K3
TK_2: BSF PORTB,LED2 以上处理K2、LED2
TEST_K3:
BTFSC PORTA,K3 以下处理K3、LED3
GOTO TK_3
BCF PORTB,LED3
GOTO TEST_K4
TK_3: BSF PORTB,LED3
TEST_K4:
BTFSC PORTA,K4 以下处理K4、LED4
GOTO TK_4
BCF PORTB,LED4
GOTO TEST_END
TK_4: BSF PORTB,LED4

TEST_END:
goto Main_Loop 回到主循环开始的地方,周而复始地扫描4个按键,做出相应的处理。

================================================
END 程序结束标志


◎本贴出现的指令“生词”:
(括号里是与之逻辑相反的,也可能暂时没有出现)
EQU
ORG
GOTO
NOP
CLRF
BSF(BCF)
MOVLW
MOVWF
BTFSC(BTFSS)
END
(若有遗漏,请大家补充)
我只是把它们列举出来,这些指令的含义是什么,上面的注释里已经有简要说明,详细的用法说明请看参考书。
如果有不明白的,大家一起讨论。希望大家像学习英语单词一样去了解它们的含义,但不需要去背,反复使用就熟了。
也希望了解这些指令的人,把它们的含义跟帖在后面。
修改过的评估板原理图附上,这是和PCB对应的。

【下一讲概要】:
PIC MCU的端口、内部存储器、程序的架构等。。。

点赞0 收藏
发表回复
发表回复