PIC习记录自动保存.docx
- 文档编号:29929373
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:26
- 大小:47.54KB
PIC习记录自动保存.docx
《PIC习记录自动保存.docx》由会员分享,可在线阅读,更多相关《PIC习记录自动保存.docx(26页珍藏版)》请在冰豆网上搜索。
PIC习记录自动保存
PIC器件具有几个包含配置位或熔丝的存储单元。
这些位指定基本的器件操作,例如振
荡器模式、看门狗定时器、编程模式和代码保护。
未正确设置这些位可能导致代码失败
或器件无法运行。
对于PIC18器件,这些位可以使用配置pragma伪指令进行设置。
(在未来版本中,也
会对于其他8位器件引入pragma伪指令。
)该pragma伪指令具有以下形式。
#pragmaconfigsetting=state|value
#pragmaconfigregister=value
其中,setting是配置设置描述符(如WDT),state是所需状态的文本描述(如
OFF)。
value字段是一个可以优先用于描述符的数值。
*PIC16F1x端口控制实验
*芯片型号:
PIC16F1936
*主要特性:
增强性中档8位CPU,8KFlash,512字节RAM,最高速度8MIPS,11通道10位 AD,2个比较器,96段LCD控制器,16通道电容触摸模块,3个增强性PWM/捕 获模块
*/
#include
/*配置芯片的工作方式,相当于其他单片机的熔丝位*/
//CONFIG1
#pragmaconfigFOSC=INTOSC //使用内部时钟
#pragmaconfigWDTE=OFF //禁止看门狗
#pragmaconfigPWRTE=OFF //PWRTdisabled
#pragmaconfigMCLRE=ON //MCLR/VPPpinfunctionisMCLR
#pragmaconfigCP=OFF //禁止程序代码保护(debug时要关闭代码保护)
#pragmaconfigCPD=OFF //禁止EEPROM的保护
#pragmaconfigBOREN=ON //使能欠压复位
#pragmaconfigCLKOUTEN=OFF //禁止CLKOUT功能
#pragmaconfigIESO=ON //Internal/ExternalSwitchovermodeisenabled
#pragmaconfigFCMEN=ON //Fail-SafeClockMonitorisenabled)
//CONFIG2
#pragmaconfigWRT=OFF //禁止代码自编程保护
#pragmaconfigVCAPEN=OFF //AllVCAPpinfunctionalityisdisabled
#pragmaconfigPLLEN=OFF //禁止4xPLL
#pragmaconfigSTVREN=ON //StackOverfloworUnderflowwillcausea //Reset)
#pragmaconfigBORV=LO //欠压复位电压为低档位(低档位为1.9V,高档位为2.5V)
#pragmaconfigLVP=OFF //高压编程模式
/*定义系统时钟,在延时函数中需要这个定义*/
#define_XTAL_FREQ 16000000UL
#defineClose_LED() LATBbits.LATB4=0 //RB4输出低电平
#defineOpen_LED() LATBbits.LATB4=1 //RB4输出高电平
intmain(void)
{
/*禁止4XPLL,内部16MHz时钟源*/
OSCCON=0B11111000;
/*清除PORTB数据锁存寄存器*/
LATB=0;
/*设置RB4端口为输出口,注意PIC有点特殊,1为输入0为输出*/
TRISBbits.TRISB4=0;
/*RB4输出低电平*/
LATBbits.LATB4=0;
/*设置RB5端口为输入*/
TRISBbits.TRISB5=1;
/*RB5设置为数字端口*/
ANSELBbits.ANSB5=0;
/*使能RB5内部上拉,作为数字输入端口在设计时要注意并不是所有端口都有内部上 拉的*/
WPUBbits.WPUB5=1;
/*等待按键按下*/
while(PORTBbits.RB5==1)
;
while
(1)
{
__delay_ms(1000);
Open_LED();
__delay_ms(1000);
Close_LED();
}
}
器件配置位可以在Window>PicMemoryViews>ConfigurationBits中查询或者直接生成代码。
PIC单片机学习笔记
烽火经典语录
PIC单片机指令介绍
2009-02-2620:
38:
50| 分类:
单片机| 标签:
|举报|字号大中小 订阅
PIC指令功能分类表
类型
助记符
操作说明
命令说明
影响标志位
传 送 类
MOVF F,d
F→d
将F寄存器的内容传送到F本身(d=1)或W(d=0)
(影响状态位)Z
MOVWF F
W→F
将W寄存器的内容传送到F,W内容不变
-
MOVLW K
K→W
将8位立即数传送到W寄存器
-
SWAPF F,d
F半字节交换→d
F寄存器的高4位和低4位交换位置后,结果存入F本身(d=1)或W(d=0)中
-
算 术 运 算 类
ADDWF F,d
F+W→d
W寄存器的内容和F寄存器的内容相加,结果存入F(d=1)或W(d=0)中
C,DC,Z
ADDLW F,d
K+W→W
W寄存器的内容和8位立即数相加,结果存入W
C,DC,Z
INCF F,d
F+1→d
F寄存器的内容加1后,结果存入W(d=0)或F(d=1)中
Z
SUBWF F,d
F-W→d
F寄存器的内容减去W寄存器的内容,结果存入W(d=0)或F(d=1)中
C,DC,Z
SUBLW K
K-W→W
8位立即数减掉W寄存器的内容,结果存入W
C,DC,Z
DECF F,d
F-1→d
F寄存器的内容减1后,结果存入W(d=0)或F(d=1)中
Z
逻 辑 运 算 类
ANDWF F,d
F∧W→d
W寄存器的内容和F寄存器的内容相与,结果存入F(d=1)或W(d=0)中
Z
ANDLW K
K∧W→W
W寄存器的内容和8位立即数相与,结果存入W
Z
IORWF F,d
F∨W→d
W寄存器的内容和F寄存器的内容相或,结果存入F(d=1)或W(d=0)中
Z
IORLW K
K∨W→W
W寄存器的内容和8位立即数相或,结果存入W
Z
XORWF F,d
F⊕W→d
W寄存器的内容和F寄存器的内容相异或,结果存入F(d=1)或W(d=0)中
Z
XORLW K
K⊕W→W
W寄存器的内容和8位立即数相异或,结果存入W
Z
COMF F,d
F取反→d
F寄存器的内容取反后,结果存入F(d=1)或W(d=0)中
Z
CLRF F
0→F,寄存器复位
F寄存器的内容被清为全0
Z
CLRW -
0→W,寄存器复位
W寄存器的内容被清为全0
Z
RLF F,d
F带C循环左移→d
将F寄存器带C循环左移,结果存入F本身(d=1)或W(d=0)。
C
RRF F,d
F带C循环右移→d
将F寄存器带C循环右移,结果存入F本身(d=1)或W(d=0)。
C
BCF F,B
将F中第B位清0
将寄存器的第B位清为0
-
BSF F,B
将F中第B位置1
将寄存器的第B位置1
-
程 序 跳 转 类
INCFSZF,d
F+1→d,结果若为0则跳一步
F寄存器的内容加1后,结果存入F本身(d=1)或W(d=0)。
如结果为0则跳过下一条指令,否则顺序执行
-
DECFSZF,d
F-1→d,结果若为0则跳一步
F寄存器的内容减1后,结果存入F本身(d=1)或W(d=0)。
如结果为0则跳过下一条指令,否则顺序执行
-
BTFSC F,B
F中第B位为0,则跳一步
测试F寄存器的第B位。
若F(B)=0,则跳过下一条指令,否则顺序执行
-
BTFSS F,B
F中第B位为1,则跳一步
测试F寄存器的第B位。
若F(B)=1,则跳过下一条指令,否则顺序执行
-
CALL K
调用子程序
首先将PC+1推入堆栈,然后将11位常数K送入PC(10~0),同时将PCLATH(4,3)→PC(12,11),从而使PC=子程序入口地址
-
GOTO K
无条件跳转
将11位常数K送入PC(10~0),同时将PCLATH(4,3)→PC(12,11),从而使PC=新地址
-
RETURN-
从子程序返回
将堆栈顶端单元的内容弹出并送入PC,从而返回主程序断点处
-
RETLW K
W带参数子程序返回
将堆栈顶端单元的内容弹出并送入PC,同时8位常数K→W,从而带着参数返回主程序断点处
-
RETFIE-
从中断服务子程序返回
将堆栈顶端单元的内容弹出并送入PC,从而返回主程序断点处,同时将全局中断使能位GIE置1,从新开放中断
-
控 制 类
SLEEP -
进入睡眠方式
该指令执行后,单片机进入低功耗睡眠模式,时基电路停振
TO,PD
CLRWDT-
0→WDT
将WDT寄存器和分配给它的预分频器同时清为全0
TO,PD
NOP -
空操作
空操作
2、wri_为写入数据子程序,该子程序从ADDR寄存器确定的地址开始对EEPROM数据区写入(范例从10H开始),每进行一次写操作将使ADDR值加一;写入数据的初始值由VALU寄存器给定(范例值为90H),每进行一次写操作将使VALU值减一;写入规定个数(由WRC_寄存器给定,范例值为0FH)的数值后,结束写入,转至read_。
3、read_为读出数据子程序,该子程序从ADDR寄存器当前值确定的地址开始对EEPROM数据区读出(当前值=ADDR+WRC_<=0FFH),每进行一次读操作将使ADDR值减一;读出数据后程序将把该数据存入通用寄存器中,开始存放的地址由FSR的值指定(范例为30H),每进行一次读操作将使FSR的值加一;读出规定个数(由寄存器REC_给定,范例值为0FH)的数值后,结束读出,回main。
因为PIC绝大部分都是单字指令,
所以一条指令中表示的寻址范围有限,
所以为了扩大寻址范围,设置了存储体寄存器,
即使指令中的内存编址相同,
但是在存储体寄存器的值不同的时候,寻址不同的物理存贮器
PIC单片机C语言简记
1.PICC安装:
PICC编译器可以直接挂接在MPLAB-IDE集成开发平台下,实现一体化的编译连接和原代码调试。
使用MPLAB-IDE内的调试工具ICE2000、ICD2和软件模拟器都可以实现原代码级的程序调试,非常方便。
首先必须在你的计算机中安装PICC编译器。
安装成功后可以进入IDE,选择菜单项ProjectÆSetLanguageToolLocations…,打开语言工具挂接设置对话框。
在对话框中选择“HI-TECHPICCToolsuite”栏,展开可执行文件组“Executable”后,列出了将被MPLAB-IDE后台调用的编译器所用到的所有可执行文件,其中有汇编编译器“PICCAssembler”、C原程序编译器“PICCCompiler”和连接定位程序“PICCLinker”。
同时在此列表中还显示了对应的可执行程序名,请注意在这里都是“PICC.EXE”。
用鼠标分别点击选中这三项可执行文件,观察对话框下面“Location”一栏中显示的文件路径,用“Browse…”按纽,从计算机中已经安装的PICC编译器文件夹中选择PICC.EXE文件。
实际上PICC.EXE只是一个调度管理程序,它会按照所输入的文件扩展名自动调用对应的编译器和连接器,用户要注意的是C语言原程序扩展名用“.c”,汇编原程序用“.as”即可。
用C语言编程的好处是可以实现模块化编程。
程序编写者应尽量把相互独立的控制任务用多个独立的C原程序文件实现,如果程序量较大,一般不要把所有的代码写在一个文件内。
基于PICC编译环境编写PIC单片机程序的基本方式和标准C程序类似,程序一般由以下几个主要部分组成:
z 在程序的最前面用#include预处理指令引用包含头文件,其中必须包含一个编译器提供的“pic.h”文件,实现单片机内特殊寄存器和其它特殊符号的声明;
z 用“__CONFIG”预处理指令定义芯片的配置位;
z 声明本模块内被调用的所有函数的类型,PICC将对所调用的函数进行严格的类型匹配检查;
z 定义全局变量或符号替换;
z 实现函数(子程序),特别注意main函数必须是一个没有返回的死循环。
一个C原程序的范例
1#include
2#include“pc68.h”//包含自定义头文件
3//定义芯片工作时的配置位
4__CONFIG(HS&PROTECT&PWRTEN&BOREN&WDTDIS);
5//声明本模块中所调用的函数类型
6voidSetSFR(void);
7voidClock(void);
8voidKeyScan(void);
9voidMeasure(void);
10voidLCD_Test(void);
11voidLCD_Disp(unsignedchar);
12//定义变量
13unsignedcharsecond,minute,hour;
14bitflag1,flag2;
15//函数和子程序
16voidmain(void)
17{
18SetSFR();
19PORTC=0x00;
20TMR1H+=TMR1H_CONST;
21LED1=LED_OFF;
22
23LCD_Test();
24
25//程序工作主循环
26while
(1){
27asm(“clrwdt”);//清看门狗
28Clock();//更新时钟
29KeyScan();//扫描键盘
30Measure();//数据测量
31SetSFR();//刷新特殊功能寄存器
32}
33}
2.PICC中的变量定义:
bit 1 布尔型位变量,0或1两种取值
char 8 有符号或无符号字符变量,PICC缺省认定char型变量为无符号数,但可以通过编译选项改为有符号字节变量
unsignedchar 8 无符号字符变量
short 16 有符号整型数
unsignedshort 16 无符号整型数
int 16 有符号整型数
unsignedint 16 无符号整型数
long 32 有符号长整型数
unsignedlong 32 无符号长整型数
float 24 浮点数
double 24 或32 浮点数,PICC缺省认定double型变量为24位长,但可以改变编译选项改成32位
除了bit型位变量外,PICC完全支持数组、结构和联合等复合型高级变量,这和标准的C语言所支持的高级变量类型没有什么区别。
例如:
数组:
unsignedintdata[10];
结构:
structcommInData{
unsignedcharinBuff[8];
unsignedchargetPtr,putPtr;
};
联合:
unionint_Byte{
unsignedcharc[2];
unsignedinti;
};
3.PICC对数据寄存器bank的管理
PICC把单片机中数据寄存器的bank问题交由编程员自己管理,因此在定义用户变量时你必须自己决定这些变量具体放在哪一个bank中。
如
果没有特别指明,所定义的变量将被定位在bank0。
例如下面所定义的这些变量:
unsignedcharbuffer[32];
bitflag1,flag2;
floatval[8];
除了bank0内的变量声明时不需特殊处理外,定义在其它bank内的变量前面必须加上相应的bank序号,例如:
bank1unsignedcharbuffer[32]; //变量定位在bank1中
bank2bitflag1,flag2; //变量定位在bank2中
bank3floatval[8]; //变量定位在bank3中
如果超过bank容量,在最后连接时会报错,大致信息如下:
(中档PIC中一个数据寄存器128字节)
Error[000] :
Can'tfind0x12Cwordsforpsectrbss_1insegmentBANK1
连接器告诉你总共有0x12C(300)个字节准备放到bank1中但bank1容量不够。
显然,只有把一部分原本定位在bank1中的变量改放到其它bank中才能解决此问题。
虽然变量所在的bank定位必须由编程员自己决定,但在编写原程序时进行变量存取操作前无需再特意编写设定bank的指令。
C编译器会根据所操作的对象自动生成对应bank设定的汇编指令。
为避免频繁的bank切换以提高代码效率,尽量把实现同一任务的变量定位在同一个bank内;对不同bank内的变量进行读写操作时也尽量把位于相同bank内的变量归并在一起进行连续操作。
PICC中把所有的函数内部定义的auto型局部变量放在bank0。
为了节约宝贵的存储空间,它采用了一种被叫做“静态覆盖”的技术来实现局部变量的地址分配。
因此用户自己定位在bank()内的变量字节数将受到一定的限制,在实际使用时需注意。
bit型为变量只能是全局的或静态的。
PICC将把定位在同一bank内的8个位变量合并成一个存放于一个固定地址。
因此所有指针对为变量的操作将直接使用PIC单片机的位操作汇编指令高效实现。
在用C语言写程序时变量一般由编译器和连接器最后定位,在写程序之时无需知道所定义的变量具体被放在哪个地址(除了bank必须声明)。
真正需要绝对定位的只是单片机中的那些特殊功能寄存器,而这些寄存器的地址定位在PICC编译环境所提供的头文件中已经实现,无需用户操心。
unsignedchartmpData@0x20; //tmpData定位在地址0x20
上面变量tmpData的地址是0x20,但最后0x20处完全有可能又被分配给了其它变量使用,这样就发生了地址冲突。
因此针对变量的绝对定位要特别小心。
从笔者的应用经验看,在一般的程序设计中用户自定义的变量实在是没有绝对定位的必要。
如果需要,位变量也可以绝对定位。
但必须遵循上面介绍的位变量编址的方式。
如果一个普通变量已经被绝对定位,那么此变量中的每个数据位就可以用下面的计算方式实现位变量指派:
unsignedchartmpData@0x20; //tmpData定位在地址0x20
bittmpBit0@tmpData*8+0; //tmpBit0对应于tmpData第0位
bittmpBit1@tmpData*8+1; //tmpBit0对应于tmpData第1位
bittmpBit2@tmpData*8+2; //tmpBit0对应于tmpData第2位
如果tmpData事先没有被绝对定位,那就不能用上面的位变量定位方式。
4.PICC的其它变量修饰关键词:
extern — 外部变量声明。
如果在一个C程序文件中要使用一些变量但其原型定义写在另外的文件中,那么在本文件中必须将这些变量声明成“extern”外部类型。
例如程序文件code1.c中有如下定义:
bank1unsignedcharvar1,var2;//定义了bank1中的两个变量
在另外一个程序文件code2.c中要对上面定义的变量进行操作,则必须在程序的开头定义:
externbank1unsignedcharvar1,var2;//声明位于bank1的外部变量
volatile— 易变型变量声明。
PICC中还有一个变量修饰词在普通的C语言介绍中一般是看不到的,它说明了一个变量的值是会随机变化的,即使程序没有刻意对它进行任何赋值操作。
“volatile”类型定义在单片机的C语言编程中是如此的重要,是因为它可以告诉编译器
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PIC 记录 自动 保存
![提示](https://static.bdocx.com/images/bang_tan.gif)