PIC16F877A的特殊功能配置
基于PIC16F877A单片机软件环分的步进电机控制系统
Abstract The system of driving stepping motor based on grammable logic controller(PIC 1 6F877A microcomputer)is introduced in this paper.Its circuit is original and succinct.Applying to the experimental system,it can help students build up the comprehension of principle,characteristic and driving circuit of PIC I 6F877A microcomputer and stepping motor.
电机正转:A—AB—B—BC—C—CA—A。 电机反转:A—AC—C—CB—B—BA—A。
图1异步电动机结构简图
58 J电气技术2009年第3期
万方数据
产品与应用
2.2步进电机的控制方法
现这种轮流通电,需将控制脉冲按规定的通电方式
反应式步进电机可以按特定的指令进行角度控 分配到电动机的每相绕组。这种分配既可以用硬件
Key words:stepping motor;PICl6F877A microcomputer:software pulsation distributing;control
system
1 引言
步进电机是一种将电脉冲信号转换成直线或角 位移的执行元件,它具有快速启停能力,精确步进 及直接接受数字量等特点,因而步进电机在定位场 合得到了广泛的应用。应用单片机进行脉冲控制, 控制精度高,因此,在工业应用场合,基于单片机 的步进电机控制器应用广泛。
基于PIC16F877A的永磁无刷直流电机的控制器设计
Ab s t r a c t :W i t h t h e d e v e l o p me n t o f s c i e n c e a n d t e c h n o l o g y ,a h i g h e r d e ma n d o f p e r f o r ma n c e o f b r u s h l e s s DC mo t o r i s r a i s e d . B a s e d o n t h e r e s e a r c h o f ma t h e ma t i c a l mo d e l a n d c o n d u c t i s DC mo t o r , we d e s i g n e d h a r d w a r e
王 宇鸡 ,丁 海波 ,杨 华松 ,徐 晨路
( 1 . 中 国煤炭 科 工集 团沈 阳研 究 院 辽 宁 抚 顺 1 1 3 1 2 2 2 ;2 . 辽 宁省 医疗 器械 检验 所 辽 宁 沈 阳 1 1 0 1 7 9 )
摘要: 随 着 科 技 的 发 展 ,对 无刷 直 流 电 动 机 的 性 能 提 出更 高 的要 求 。 本 文在 研 究 无 刷 直 流 电动 机 数 学模 型 、 导 通 方
DC mo t o r
NG Ha i — b o 2 YANG W ANG Yu — k u n 。 DI Hu a — s o n g , XU C h e n — l u
, ,
(1 . S h e n y a n g R e s e a r c h I n s t i t u t e o fC o a l T e c h n o l o g y E n g i n e e r i n g G r o u p C b 仍 F u s h u n 1 1 3 1 2 2 , C h i n a ; 2 . L i a o n mg Me d i c a l
PIC16F877A功能及其编程
4.1.1 端口A
因此,在使用RA口时,除了要设置TRISA外,有 时相关寄存器也要设置。
注意:在上电复位时,与AN有关的端口的默认 设置是作为模拟端口,即ADCON1(见4.6)中默认 值为0b00xx0000,这个值的设置结果是除RA4外的所 有的RA引脚都作为模拟输入。
信的时钟线; RC7/RX/DT:IO引脚、异步串行通信的接收、同步串行通
信的数据线。
4.1.4 端口D
端口D有8个引脚,它除了作为普通IO口外, 还能作为并行从动口使用。
4.1.5 端口E 端口E只有3个引脚,它们都可以作为AD转换
的模拟电压输入口,功能如下:
RE0/RD/AN5:IO引脚、并行从动口的读控制、 模拟电压输入通道AN5;
➢ 中断的特点:可返回性。中断处理结束后必须能 回到原先的程序,并且能继续运行原先的程序,
这就需要在中断时能进行现场保护与恢复。
中断的执行过程
➢ 中断发生:程序执行到某行,突然事件(能够产 生中断的事件)发生,产生中断。
➢ 断点保护:CPU自动将中断时刻即将要执行的下 一条指令的地址压入堆栈。
➢ 中断响应:CPU自动将PC强制设为0X0004,且GIE =0。执行中断服务程序(自动完成现场保护与恢 复,手动清中断标志位)。
将被调试系统占用,因此在调试时此二个引脚暂 不能使用。
3、8个引脚具有内部弱上拉使能控制 由OPTION_REG寄存器的第7位RBPU控制,如果弱 上拉使能,作为输入的RB口在端口悬空时将被上拉 到高电平。以RB0为例,如下图所示:
4、RB0/INT具有外部中断功能。
5、RB的的高4位还具有电平变化中断功能
ADIE
PIC单片机电子密码锁
一、系统主要功能1)基本要求1.硬件设计要求:(1)CPU使用PIC16F877A。
(2)用4x4矩阵键盘作为操作信息输入。
(3)用LCD1602或六位数码管作为信息输出。
(建议使用LCD1602)(4)用蜂鸣器及发光二极管作为错误报警及状态显示。
2.系统功能要求:(1)输入密码功能。
输入密码时用“*”号或“-”显示。
在输入密码时,具有清除前一位密码功能(用CLR键)。
密码输入完毕,按(ENTER键)确认并生效。
(2)上锁功能。
在锁开状态下,通过(LOCK键)上锁。
(3)在锁合的状态下,通过密码开锁功能。
开锁时,直接在键盘上输入六位密码,按(ENTER键)确认,如果密码正确,转入锁开状态。
(4)在锁开状态下,修改密码功能。
在键盘上输入六位新的密码,按(ENTER键)确认,代替旧密码,并保存在RAM中。
(4)在开锁时,如果输入密码三次错误,产生声、光报警功能。
(5)0~9为密码键数字键,E为ENTER键,C为清除键CLR键,D作为上锁键LOCK键,如果用到其他键时,可自行定义。
2)进阶要求密码保存在PIC16F877A内部的EEPROM中,以防断电密码丢失。
(不使用外挂的EEPROM,如:AT24C02等)二、系统设计要求1)根据系统的功能和目标,画出系统功能框图。
2)根据系统功能框图用Proteus画出仿真电路图。
3)根据系统的功能要求,画出程序流程图。
4)根据程序流程图,用PIC C语言编写系统源程序。
5)进行编译、调试建立目标代码。
6)在Proteus环境下进行仿真。
三、设计报告报告内容包括系统设计思路、方案选择、器件选择及电路元器件明细表、系统功能框图、程序流程图、源程序清单、系统工作原理和设计心得等。
四、评分标准:1、完成《基本要求》者,得分80~89分;2、完成《基本要求》及《进阶要求》者,得分90~100分;五、设计时间安排十九周的星期一至星期五(2011年6月27日至7月1日)1)周一:布置任务,进行方案选择、器件选择。
基于PIC16F877A单片机的储能电池箱温度控制系统设计
控制系统与智能制造
基于 PIC16F877A 单片机的储能电池箱温度控制系统设计
王 琦 1袁韩天兴 1袁贾 伟 2袁李林高 1
渊1.山西大学 自动化系袁太原 030013曰2.山西平朔煤矸石发电有限责任公司袁朔州 036800冤
摘要院储能电池组因数量多袁布置密集袁除受周围环境影响袁电池组自身也存在产热和散热
不平衡等热失控问题袁极易导致储能电池箱内温度变化明显袁而电池的使用寿命尧容量以
及安全稳定运行均与温度密切联系遥 该文采用PIC16F877A单片机对电池箱温度系统进行
在线监测和自动控制袁介绍了该温度控制系统的硬件组成尧传感器的工作原理以及部分软
件流程袁控制部分则采用模糊控制方法对温度和湿度2个生态因子参数进行智能控制遥
关键词院温度控制曰PIC16F877A曰DS18B20曰储能电池
中图分类号院TP273 文献标志码院粤
文章编号院员园园员鄄怨怨源源渊圆园19冤06鄄园园25鄄园4
Design of Temperature Control System for Energy Storage Battery Box Based on PIC16F877A Microcontroller
收稿日期院2019-03-22曰修订日期院2019-05-14 基金项目院国家自然科学基金项目渊U1610116冤曰山西省科技重大专项项目渊MD2016鄄02冤曰山西省研究生联合培养基地人才
培养资助项目渊2017JD03冤 作者简介院王琦渊1973要冤袁女袁硕士袁教授袁研究方向为测控系统集成与优化曰韩天兴渊1994要冤袁女袁在读硕士研究生袁研究方
1 系统总体方案
pic16f877a编程实例
pic16f877a编程实例pic16f877a是一款常用的单片机,被广泛应用于嵌入式系统中。
它具有多种功能和强大的性能,可以实现各种应用需求。
本文将以pic16f877a编程实例为主题,介绍其基本特性和常见应用。
pic16f877a是一款8位单片机,采用哈佛架构,具有高性能和低功耗的特点。
它内置了8KB的程序存储器,368字节的数据存储器,以及35个I/O引脚,可以满足大多数嵌入式系统的需求。
我们来看一个简单的实例,通过pic16f877a控制LED灯的开关。
```c#include <pic16f877a.h>void main() {TRISB0 = 0; // 设置RB0为输出引脚while(1) {RB0 = 1; // 将RB0引脚电平设置为高,LED灯亮__delay_ms(1000); // 延时1秒RB0 = 0; // 将RB0引脚电平设置为低,LED灯灭__delay_ms(1000); // 延时1秒}}```在上面的程序中,我们首先将RB0引脚设置为输出引脚,然后进入一个无限循环。
在循环中,我们将RB0引脚电平设置为高,LED灯亮起,然后延时1秒;然后将RB0引脚电平设置为低,LED灯熄灭,再次延时1秒。
通过不断重复这个过程,我们可以实现LED灯的闪烁效果。
除了控制LED灯,pic16f877a还可以用来控制其他外设,如蜂鸣器、液晶显示屏等。
下面是一个使用pic16f877a控制蜂鸣器的实例。
```c#include <pic16f877a.h>void main() {TRISB0 = 0; // 设置RB0为输出引脚while(1) {RB0 = 1; // 将RB0引脚电平设置为高,蜂鸣器鸣叫__delay_ms(1000); // 延时1秒RB0 = 0; // 将RB0引脚电平设置为低,蜂鸣器停止鸣叫__delay_ms(1000); // 延时1秒}}```在上面的程序中,我们同样将RB0引脚设置为输出引脚,并进入一个无限循环。
PIC16F877A头文件中文注释
#ifndef _HTC_H_#warning Header file pic168xa.h included directly. Use #include <htc.h> instead. #endif/** Microchip单片机的头文件* PIC 16F873A chip* PIC 16F874A chip* PIC 16F876A chip* PIC 16F877A chip* 中档单片机*/#if defined(_16F874A) || defined(_16F877A)#define __PINS_40#endifvolatile unsigned char INDF @ 0x00;//间接寻址寄存器volatile unsigned char TMR0 @ 0x01;//定时器0volatile unsigned char PCL @ 0x02;//低8位程序计数器volatile unsigned char STATUS @ 0x03;//程序状态寄存器volatile unsigned char FSR @ 0x04;//特殊功能寄存器volatile unsigned char PORTA @ 0x05;//端口A寄存器volatile unsigned char PORTB @ 0x06;//端口B寄存器volatile unsigned char PORTC @ 0x07;//端口C寄存器#ifdef __PINS_40volatile unsigned char PORTD @ 0x08;//端口D寄存器volatile unsigned char PORTE @ 0x09;//端口E寄存器#endifvolatile unsigned char PCLATH @ 0x0A;//高5位程序计数器volatile unsigned char INTCON @ 0x0B;//中断控制寄存器volatile unsigned char PIR1 @ 0x0C;//中断标志寄存器PIR1volatile unsigned char PIR2 @ 0x0D;//中断标志寄存器PIR2volatile unsigned char TMR1L @ 0x0E;//T1低字节计数寄存器volatile unsigned char TMR1H @ 0x0F;//T1高字节计数寄存器volatile unsigned char T1CON @ 0x10;//TMR1控制寄存器volatile unsigned char TMR2 @ 0x11;//定时/计数器TMR2volatile unsigned char T2CON @ 0x12;//TMR2控制寄存器volatile unsigned char SSPBUF @ 0x13;//收/发数据缓冲器volatile unsigned char SSPCON @ 0x14;/*同步串口控制寄存器,对MSSP模块的功能和指标进行设置和定义*/volatile unsigned char CCPR1L @ 0x15;//捕获/比较/PWM寄存器低字节volatile unsigned char CCPR1H @ 0x16;//捕获/比较/PWM寄存器低字节volatile unsigned char CCP1CON @ 0x17;//CCP1CON寄存器volatile unsigned char RCSTA @ 0x18;//USART接收控制兼状态寄存器volatile unsigned char TXREG @ 0x19;//USART发生缓冲器volatile unsigned char RCREG @ 0x1A;//USART接收缓冲器volatile unsigned char CCPR2L @ 0x1B;//捕获/比较/PWM寄存器低字节volatile unsigned char CCPR2H @ 0x1C;//捕获/比较/PWM寄存器低字节volatile unsigned char CCP2CON @ 0x1D;//CCP2CON寄存器volatile unsigned char ADRESH @ 0x1E;//ADC转换结果寄存器高字节volatile unsigned char ADCON0 @ 0x1F;//A/D转换器开关位/* bank 1 registers */volatile unsigned char OPTION @ 0x81;/*/选择寄存器,用于配置TMR0/WDT预分频系数、外部INT中断、TMR0和端口B的弱上拉。
PIC16F877A之定时TMR0
PIC16F877A之定时TMR0编写下面的实验程序实现的功能是让RC 口所带的8 个LED 一个接一个的全亮起来,最后达到全亮后再一个一个的灭下去,这样反复循环,使用定时器查询方式控制延时,而不使用定时器的中断。
中断程序会在以后陆续写到上面来tmr0 equ 01hpcl equ 02hstatus equ 03hoption_reg equ 81hintcon equ 0bhportc equ 07htrisc equ 87htmr0data equ 15hcount equ 20hrp0 equ 5horg 0000hnopgoto mainorg 0005hmain nopbsf status,rp0movlw 00hmovwf triscmovlw 07hmovwf option_regbcf status,rp0clrf countloop1movf count,0call readmovwf portcincf count,1movlw 0fhandwf count,1call delaycall delaycall delaycall delaycall delaycall delaycall delaygoto loop1delaybcf intcon,2movlw tmr0datamovwf tmr0delay1btfss intcon,2goto delay1returnread addwf pcl,1retlw b’10000000’retlw b’11000000’retlw b’11100000’retlw b’11110000’retlw b’11111000’retlw b’11111100’retlw b’11111110’retlw b’11111111’retlw b’11111110’retlw b’11111100’retlw b’11111000’retlw b’11110000’retlw b’11100000’retlw b’11000000’retlw b’10000000’retlw b’00000000’end本程序利用的16F877A 的TMR0,具体如何设置请查找16F877C 中的INTCON、OPTION_REG 、TMR0 等相关特殊工作寄存器的功能说明。
基于PIC16F877A智能电子秤的设计
目录第1章前言 (1)1.1 选题的背景和意义 (1)1.2 国内外电子秤发展及成果 (2)1.3 研究现状 (3)1.3.1 影响因素 (3)1.3.2 产品质量 (3)1.3.3 发展方向 (4)1.3.4 电子秤的智能化 (4)1.4 电子秤设计的任务及要求 (4)第2章系统方案设计与论证 (6)2.1 系统方案的设计思路 (6)2.2 系统方案设计 (6)2.3 系统方案比较与论证 (6)2.3.1 单片机的选型 (6)2.3.2 称重传感器选型 (10)2.3.3 放大部分选型 (14)2.3.4 A/D转换器选型 (14)2.3.5 显示模块选型 (16)2.3.6 键盘输入选型 (18)2.3.7 语音芯片选型 (19)第3章系统硬件设计 (20)3.1 基于PIC16F877A的主控电路 (20)3.1.1 PIC16F877A简介 (20)3.1.2 PIC16F877A引脚介绍 (20)3.1.3 主控电路设计 (21)3.2 称重部分 (22)3.2.1 GF-7桥型称重器简介 (22)3.2.2 工作原理 (23)3.2.3 硬件电路 (23)3.3 测身高部分 (24)3.3.1 超声波测距原理 (24)3.3.2 测身高硬件电路设计 (24)3.4 显示部分 (26)3.5 语音播报部分 (27)3.6 键盘部分 (28)3.7 报警电路 (28)3.8 电源电路 (29)3.9 硬件低功耗设计 (29)3.9.1 低功耗元器件选择 (29)3.9.2 低功耗电路设计 (30)第4章软件设计 (31)4.1 称重部分软件设计 (31)4.2 测身高部分软件设计 (32)第5章结论 (36)致谢 (37)参考文献 (38)第1章前言目前,随着社会的发展、生活水平不断提高,人们越来越关注自己的身体健康。
许多人由于工作的压力和不良的饮食习惯,使得身体健康每况愈下,疾病也随之而来,而在这些人群中,患有肥胖和营养不良的病人居多。
PIC16F877A开发学习板用户手册
KEY_LED 实验步骤: 短接跳线 J23 将 hex 文件下载到单片机中 实验现象:按下 GPIO 键,松开后,led 点亮;按下 INT 健,松开后,led 灭 KEY_ZTJ 10、 矩阵键盘实验 KEY_JZH 实验步骤: 短接跳线 J50 的 LED_ON 和中间脚 将 hex 文件下载到单片机中 实验现象:按下按键,数码管显示键值 11、 定时器/计数器 T0 实验 T0_DSQ 实验步骤: 短接跳线 J23 将 hex 文件下载到单片机中 实验现象:下载代码,运行程序,LED 闪烁 T0_JS_1 实验步骤: 短接跳线 J50 的 LED_ON 和中间脚
断电后数据保持,上电后,从断电时的值开始加(写入 24C02 的数据为 1 递加到 99,LCD1602 从 24C02 中读数据之后显示)
AT24C02 实验步骤: 短接跳线 J18 上面两个引脚和 J22 上面两个引脚 将 hex 文件下载到单片机中 将 1602 液晶屏插入 1602 接口 如果此时没有显示则按复位键便可正常显示 实验现象:1602 第一行显示数值,数值从 1 加到 99, 断电后数据保持,上电后,从断电时的值开始加 17、 模数转换 AD 实验 AD_1
将 hex 文件下载到单片机中 实验现象:LED 灯依次点亮 2、 数码管实验 SMG 实验步骤: 短接跳线 J50 的 LED_ON 和中间脚 将 hex 文件下载到单片机中 实验现象:8 个数码管依次显示 0~7 SMG_JT 实验步骤: 短接跳线 J50 的 LED_ON 和中间脚 将 hex 文件下载到单片机中 实验现象:数码管静态显示一个数字 74HC595_SMG 实验步骤: 短接跳线 J50 的 LED_ON 和中间脚 将 hex 文件下载到单片机中 实验现象:8 位数码管显示 0-7 3、 蜂鸣器实验 BUZZER 实验步骤: 短接跳线 J6
基于PIC16F877A控制boostbuckDCDC变换器
输出电压可设置的升降压DC-DC变换器如下图,设计一个DC-DC变换电路:要求:1)当输入电压Ui 在14V~16V变化时,输出电压Uo恒压输出,Uo稳态相对误差不超过2%,Uo可通过键盘设置为10~20V间的任意电压,电压步进长度0.1V;2)要求用液晶屏显示输出电压和输出电流,电压显示精度到0.1V,电流显示精度到50mA;要求带4*43)输出负载电流I2范围0~1A;4)试计算电源效率。
<一>电路部分:设计原理:主电路boost-buck电路,驱动电路,控制电路(pic单片机控制)。
原理概述:boost-buck电路利用开关管的开关,输出电压的平均值Uo=ton/(T-ton)×Ui=D/(1-D)*ui。
D为占空比。
用单片机输出PWM方波(经过驱动电路放大后)控制MOS 管的开关,来调节输出电压。
将输出电压送回PIC单片机模数转换模块,通过反馈调节PWM 占空比调节电压,使输出稳定。
利用差分运放电路,检测出输出电压与输出电流的关系。
键盘输入设置电压。
外接液晶屏显示输出电压和输出电流和输出电流。
主电路:驱动电路:控制电路:液晶外围电路:键盘电路模块:用multisim仿真如下结果:设计小结:输出电流与输出电压的关系U=RI。
在程序设计中,通过电压的输出在液晶屏上显示电流的输出。
〈二〉程序部分:输出pwm:#include<pic.h>unsigned int DRE;__CONFIG(0x2001);void PWM(){PR2=39; //频率25KHzTRISC|=0x04; //RC2置为输入CCP1CON=0X0c; //PWM输出CCPR1L=0X01; //占空比25%T2CON=0X04; //开定时器TMR2,预分频1:1TMR2IF=0; //清除TMR2中断标志位}void main(){while(1){PWM();DRE=40; //高电平寄存器的值CCPR1L=DRE/4; //装入高8位CCP1CON<5>=(DRE/2)%2; //装入次低位CCP1CON<4>=DRE%2; //装入最低位while(TMR2IF==0);TRISC=0x00;}}AD转换:#include<pic.h>__CONFIG(FOSC_XT&WDTE_OFF&LVP_OFF);void AD(){TRISA0=1; //RA1设置为模拟输入ADCON1=0x00; //参考电压电源电压VDD AD转换周期Fosc/4 ADCON0=0x40; //}void delayms(int xms){int i,j ;for(i=0;i<xms;i++)for(j=0;j<150;j++) ;}void main(){unsigned int x,y,z,A,B,C;unsigned int Result,Result1,ADRES;while(1);{ delayms(5); //采样采样电压充电延时GO=1;}while(GO==1);{}Result=ADRES;x=(Result*5)/256; //取个位十分位百分位y=((Result*50)/256)%10;z=((Result*500)/256)%10;Result1=Result/1.2-1.5;A=(Result*5)/256; //取个位十分位百分位B=((Result*50)/256)%10;C= ((Result*500)/256)%10;}液晶屏与键盘:#include<pic.h>#define LCD_EN RC7#define LCD_RW RC6#define LCD_RS RC5unsigned int x,y,z,A,B,C;unsigned char dis0[]="voltage:";unsigned char dis1[]={'0','1','2','3','4','5','6','7','8','9','.'}; unsigned char dis2[]="current:";unsigned char dis3[]={'0','1','2','3','4','5','6','7','8','9','.'}; unsigned char dis4[3], dis5[3];__CONFIG(FOSC_XT&WDTE_OFF&LVP_OFF);void delay (int xms){int i,j;for(i=0;i<xms;i++){for(j=0;j<150;j++);}}void write_com(){unsigned char com ; //声明写指令LCD_RS=0;LCD_RW=0;LCD_EN=0;PORTD=com;delay(5);LCD_EN=1;delay(5);LCD_EN=0;}void write_date(){unsigned char date;LCD_RS=1;LCD_RW=0;LCD_EN=0;PORTD=date;delay(5);LCD_EN=1;delay(5);LCD_EN=0;}void init(){ TRISD=0x00;TRISC&=0x1f;write_com(0x38);delay(5);write_com(0x0c);delay(5);write_com(0x06);delay(5);write_com(0x01);delay(5);}void display(){unsigned char j; dis4[0]=dis1[x];dis4[1]=dis1[10]; dis4[2]=dis1[y];dis4[3]=dis1[z]; write_com(0xc8); for(j=0;j<=3;j++) {write_date(dis5[j]);delay(1);}unsigned char k; dis5[0]=dis3[A];dis5[1]=dis3[10]; dis5[2]=dis3[B];dis5[3]=dis3[C]; write_com(0xc8); for(k=0;k<=3;k++) {write_date(dis4[k]);delay(1);}}void main(){unsigned char i;init();write_com(0x80); //显示第1行for(i=0;i<=8;i++){write_date(dis0[i]);delay(1);}write_com(0x80+0x40);//显示第2行for(i=0;i<=8;i++){write_date(dis2[i]);delay(1);}}#include<pic.h>#include<pic.h>#define LCD_EN RC7#define LCD_RW RC6#define LCD_RS RC5unsigned int x,y,z,A,B,C;unsigned char dis0[]="voltage:";unsigned char dis1[]={'0','1','2','3','4','5','6','7','8','9','.'}; unsigned char dis2[]="current:";unsigned char dis3[]={'0','1','2','3','4','5','6','7','8','9','.'}; unsigned char dis4[3], dis5[3];__CONFIG(FOSC_XT&WDTE_OFF&LVP_OFF);void delay (int xms){int i,j;for(i=0;i<xms;i++){for(j=0;j<150;j++);}}void write_com(){unsigned char com ; //声明写指令LCD_RS=0;LCD_RW=0;LCD_EN=0;PORTD=com;delay(5);LCD_EN=1;delay(5);LCD_EN=0;}void write_date(){unsigned char date;LCD_RS=1;LCD_RW=0;LCD_EN=0;PORTD=date;delay(5);LCD_EN=1;delay(5);LCD_EN=0;}void init(){ TRISD=0x00;TRISC&=0x1f;write_com(0x38);delay(5);write_com(0x0c);delay(5);write_com(0x06);delay(5);write_com(0x01);delay(5);}void display(){unsigned char j;dis4[0]=dis1[x];dis4[1]=dis1[10];dis4[2]=dis1[y];dis4[3]=dis1[z]; write_com(0xc8);for(j=0;j<=3;j++) {write_date(dis5[j]);delay(1);}unsigned char k;dis5[0]=dis3[A];dis5[1]=dis3[10];dis5[2]=dis3[B];dis5[3]=dis3[C];write_com(0xc8);for(k=0;k<=3;k++){write_date(dis4[k]);delay(1);}}void main(){unsigned char i;init();write_com(0x80); //显示第1行for(i=0;i<=8;i++){write_date(dis0[i]);delay(1);}write_com(0x80+0x40);//显示第2行for(i=0;i<=8;i++){write_date(dis2[i]);delay(1);}} #define KEYBOARD_PORT_DIR TRISB //键盘扫描方向端口#define KEYBOARD_PORT PORTB //键盘扫描端口#define NO_KEY 0xFF //无按键__CONFIG(0x3FFF);unsigned char L,O;char scankeypad(); //获取4×4键盘值char getkeyvalue(); //获取某按键的值void delay(int xms){int i,j;for(i=0;i<xms;i++)for(j=0;j<150;j++);}const char ccode[16][2]={{0xEE,1},{0xED,2},{0xEB,3},{0xE7,'L'},{0xDE,4},{0xDD,5},{0xDB,6}, {0xD7,'+'},{0xBE,7},{0xBD,8}, {0xBB,9}, {0xB7,'-'},{0x7E,'.'},{0x7D,0},{0x7B,'*'}, {0x77,'O'}};char scankeypad() //获取4*4键盘扫描码{char key4H=0,key4L=0,scancode=0;TRISD=0xF0; //低四位输出,高四位输入PORTD=0x00; //低四位输出0asm("nop");asm("nop"); //待输出信号稳定key4H=PORTD; //读取高四位key4H=key4H&0xF0; //将低四位屏蔽if(key4H!=0xF0) //有按键按下{delay(20);key4H=PORTD; //重读if(key4H!=0xF0){TRISD=0x0F;PORTD=0x00;asm("nop");asm("nop");key4L=PORTD; //读取高四位key4L=key4H&0x0F; //将高四位屏蔽if(key4L!=0x0F) //有按键按下{scancode=key4H|key4L;//高四位与低四位组成键盘扫描码while(PORTD!=0x0F); //按键未松开等待return(scancode);}}}return NO_KEY;}char Getkeyvalue() //获取扫描码{ char keyvalue=0,c=0;keyvalue=scankeypad();if(keyvalue!=NO_KEY){while(keyvalue!=ccode[c][0]){ //比较描码与当前数组元素是否相等c++;}return(ccode[c][1]);//返回序号对应值}return(NO_KEY);}void main(){int i=0,Num[2]={0,0},Numindex=0;while(1){i=Getkeyvalue(); //获得键值if(i!=NO_KEY) //有按键{if(i>=0&&i<=9){Num[2]=Numindex*10+i; //新数值}else{switch(i){case'L':Num[0]=0;Num[1]=0;Numindex=0;break;case'.':break;case'O': Num[2]=Numindex*10+i;break;default:break; };}}}}电源输出效率:。
PIC16F877A单片机中文文献
PIC16F877A单片机是microchip公司的产品,它采用14位的RISC指令系统,内部集成了A/D转换器、EEPROM、模拟比较器、带比较和捕捉功能的定时器/计数器、PWM输出、异步串行通信电路等。
1.程序存储器程序存储器和堆栈PIC16F877A单片机内部具有8K×14位的Flash程序存储器,程序存储器具有13位宽度的程序计数器地址范围:0000H-1FFFH。
由程序计数器提供13条地址线进行单元选择,每个单元宽14位,即PIC16F877A的指令字节宽度为14位,能够存放一条PIC单片机系统指令。
在系统上电或其他复位情况下,程序计数器均从0000H地址单元开始工作。
如果遇到调用子程序或系统发生事件中断时,将把当前程序断点处的地址送入8级×14位的堆栈区域进行保护。
堆栈是一个独立的存储区域,在调用的子程序或中断服务程序执行完后,再恢复断点地址。
通过14位程序总线,取出对应程序之灵的机器码,送入指令存储器,将组成的操作码和操作数进行有效分离。
如果操作数为地址,则进入地址复用器;如果操作数为数据,则进入数据复用器。
而操作码将在指令译码和控制单元中转化为相应的功能操作。
PIC的多数指令均是顺序执行,即使条件跳转也是隔行间接跳转。
具有大范围转移功能的指令只有两条:无条件GOTO语句和调用子程序CALL语句。
但它们受到2KB范围的约束。
所以必须将整个程序存储器以2KB为单位进行分页。
PIC16F877A单片机的上电复位地址是0000H,中端口地址是0004H,中断产生时PC指针会自动指向该地址。
在进行中断应用时,特别是涉及多个中断同时打开时,必须要逐个对中断标志进行判断。
编程时,在0000H-0003H单元内要放置一条GOTO跳转指令,跳转到主程序,以避开0004H存储器单元。
2.数据存储器数据存储器PIC单片机的数据存储器与传统的MCS-51单片机一样,在配置结构上可分为通用寄存器和特殊功能寄存器两大类。
PIC16F877A的光伏并网发电装置设计
成 。 系统 具 有 最 大 功 率 点 ( P 、 率相 位 跟 踪 功 能 ; 有 过 流 、 MP T) 频 具 欠压 、 压 等 保 护 功 能 , 系统 故 障 排 除 后 还 可 自动 过 当
恢 复 正 常 工作 ; 有 L 具 CD液 晶显 示 , 备 良好 的 人 机 交 互 能 力 。 具 关 键 词 : — AC逆 变 ; P M ; 率 相 位 跟 踪 ; 大功 率 点 跟 踪 DC SW 频 最 中 图分 类 号 :TM6 5 1 文 献 标 识 码 :A
应 用 天 地
P C1 F 7 A 的 光 伏 并 网发 电装 置 设 计 * I 87 6
白炳 良 。 碧 莲 谢
( 州 师 范 学 院 物 理 与 电子 信 息 工 程 系 , 州 33 0 ) 漳 漳 6 0 0
摘 要 :并 网发 电 系统 以 P C1 F 7 A 单 片 机 为核 心 , DC AC逆 变 电路 、 C滤 波 电路 、 频 变压 隔 离 器及 调 理 电路 构 I 6 87 由 — L 工
技 术 领 域 之 一 。太 阳 能是 一种 清 洁 、 效 和永 不 衰 竭 的 可 高
再生能源 , 满足未来全 球 电力需求 的法宝 。能源短 缺 、 是
池 , s 0 6 ; R 为模 拟电网电压 的正 弦参考信 号 , R =3  ̄3 U E F
频 率 fE为 4 ~ 5 ; 为 工 频 隔 离 变 压 器 , 比 n : RF 5 5Hz T 变 n
pha e t a kig. O v r u r nt s r c n e c r e ,un r ola de v t ge,ov r la o e ton, t .e bl h yse u omatc l e um eno m a r fe r e vot gepr t c i e c na et e s t m a t ialyr s r lwo k a t rtou bls oo i e h tng. LCD s l y pr vde ih a g od i e a tve p ror a e dip a o i sw t o nt r ci e f m nc . Key wor ds:DC —A C n re wer SPW M ;r q nc a e ta ki i ve t rpo ; f e ue y ph s r c ng; M PPT
基于PIC16F877A的太阳能与市电互补照明系统控制器的设计
De i f i一 ‘ i n s s e c n r le s o el o ’ s n o一‘ m i to y t m o to 一r u m g s 一 r c ls c m p e t d 一 ‘ g lu ‘ 。 l na 一 l ● l a l 一m nJ — e e b o y c mm e ca w e a e n PI 1 F8 7 r ilpo r b s d o C 7 A 6
s i h a d c mme ca o rs p l wi h S me p roma c a a t r n u ci n fc n r l r h v e n t s d a d a ay e . e wt n o c r ilp we u p y s t . o e f r n e p r me e a d f n t s o o tol a e b e e t n n z d T c s o e e l h
Ha d r war c nqu e Te h i e
基 于 PC 6 8 7 的太 阳能与市 电互补 照 明系 统 I F 7A 1 控 制器 的设 计 : l :
王 秀 玲 , 文 兰 , 武 臣 王 吴 (. 1 内蒙 古 工 业 大 学 电 力 学 院 自动 化 系 , 内 蒙 古 呼 和 浩 特 0 0 5 ; 10 1 2 北 京 工 业 大 学 信 息 与 控 制 工 程 学 院 VL I实 验 室 ,北 京 10 2 ) . S 0 14
统 运行 控 制 等功 能 。对 其 功 能和 工 作特 性 进 行 了测 试 分 析 。 结果 表 明 , 制 器各 项 功 能 完成 良好 , 控 具 有较 高的 实用价 值 和 良好 的应 用前 景
PIC16F877A单片机中文文献
PIC16F877A单片机是microchip公司的产品,它采用14位的RISC指令系统,内部集成了A/D转换器、EEPROM、模拟比较器、带比较和捕捉功能的定时器/计数器、PWM输出、异步串行通信电路等。
1.程序存储器程序存储器和堆栈PIC16F877A单片机内部具有8K×14位的Flash程序存储器,程序存储器具有13位宽度的程序计数器地址范围:0000H-1FFFH。
由程序计数器提供13条地址线进行单元选择,每个单元宽14位,即PIC16F877A的指令字节宽度为14位,能够存放一条PIC单片机系统指令。
在系统上电或其他复位情况下,程序计数器均从0000H地址单元开始工作。
如果遇到调用子程序或系统发生事件中断时,将把当前程序断点处的地址送入8级×14位的堆栈区域进行保护。
堆栈是一个独立的存储区域,在调用的子程序或中断服务程序执行完后,再恢复断点地址。
通过14位程序总线,取出对应程序之灵的机器码,送入指令存储器,将组成的操作码和操作数进行有效分离。
如果操作数为地址,则进入地址复用器;如果操作数为数据,则进入数据复用器。
而操作码将在指令译码和控制单元中转化为相应的功能操作。
PIC的多数指令均是顺序执行,即使条件跳转也是隔行间接跳转。
具有大范围转移功能的指令只有两条:无条件GOTO语句和调用子程序CALL语句。
但它们受到2KB范围的约束。
所以必须将整个程序存储器以2KB为单位进行分页。
PIC16F877A单片机的上电复位地址是0000H,中端口地址是0004H,中断产生时PC指针会自动指向该地址。
在进行中断应用时,特别是涉及多个中断同时打开时,必须要逐个对中断标志进行判断。
编程时,在0000H-0003H单元内要放置一条GOTO跳转指令,跳转到主程序,以避开0004H存储器单元。
2.数据存储器数据存储器PIC单片机的数据存储器与传统的MCS-51单片机一样,在配置结构上可分为通用寄存器和特殊功能寄存器两大类。
基于PIC16F877A自动太阳跟踪器的设计
基于PIC16F877A 自动太阳跟踪器的设计伍春生1,2,刘四洋1,2,彭燕昌1,许洪华1(1.中国科学院电工研究所 北京 100080;2.中国科学院研究生院 北京 100039)摘 要:太阳能电池板的效率偏低导致光伏发电系统成本过高,是困扰其长足发展的主要原因。
阐述了光伏发电自动跟踪系统的基本原理和研制的关键技术并以PIC16F877A 为核心控制单元,设计了一种自动太阳跟踪器,能自动跟踪太阳的高度角与方位角,使太阳光线始终垂直入射在光伏阵列的表面以获取最大发电效率。
详细介绍了系统软硬件设计方案并研制出相应可靠稳定运行的样机。
关键词:PIC16F877A ;自动太阳跟踪器;光伏阵列;发电效率中图分类号:TP273 文献标识码:B 文章编号:10042373X (2007)202147203Design of Automatic Sun T rackers B ased on PIC16F877AWU Chunsheng 1,2,L IU Siyang 1,2,PEN G Yanchang 1,XU Honghua 1(1.Institute of Electrical Engineering ,Chinese Academy of Sciences ,Beijing ,100080,China ;2.Graduate School ,Chinese Academy of Sciences ,Beijing ,100039,China )Abstract :The main idea of restricting development is that solar panels lead to low efficiency photovoltaic power generation system too costly.The basic principle and key technology based on PIC16F877A of it is proposed.An automatic sun trackers following with the azimuth angle and the solar altitude of the sun based on PIC16F877A is designed in this paper ,which makes vertical incidence sun ′s ray on the surface of photovoltaic (PV )arrays and maximizes generating efficiency.The hardware and software schemes of system are introduced in detail ,and finally automatic sun trackers running reliably are developed.K eywords :PIC16F877A ;automatic sun trackers ;PV arrays ;generating efficiency收稿日期:2007205207 光伏发电能为人类提供可持续能源,并保护赖以生存的环境,但其发电效率低,发电成本相对较高仍然是制约其大规模应用的重要因素。
最新PIC16F877A单片机中文文献
PIC16F877A单片机是microchip公司的产品,它采用14位的RISC指令系统,内部集成了A/D转换器、EEPROM、模拟比较器、带比较和捕捉功能的定时器/计数器、PWM输出、异步串行通信电路等。
1.程序存储器程序存储器和堆栈PIC16F877A单片机内部具有8K×14位的Flash程序存储器,程序存储器具有13位宽度的程序计数器地址范围:0000H-1FFFH。
由程序计数器提供13条地址线进行单元选择,每个单元宽14位,即PIC16F877A的指令字节宽度为14位,能够存放一条PIC单片机系统指令。
在系统上电或其他复位情况下,程序计数器均从0000H地址单元开始工作。
如果遇到调用子程序或系统发生事件中断时,将把当前程序断点处的地址送入8级×14位的堆栈区域进行保护。
堆栈是一个独立的存储区域,在调用的子程序或中断服务程序执行完后,再恢复断点地址。
通过14位程序总线,取出对应程序之灵的机器码,送入指令存储器,将组成的操作码和操作数进行有效分离。
如果操作数为地址,则进入地址复用器;如果操作数为数据,则进入数据复用器。
而操作码将在指令译码和控制单元中转化为相应的功能操作。
PIC的多数指令均是顺序执行,即使条件跳转也是隔行间接跳转。
具有大范围转移功能的指令只有两条:无条件GOTO语句和调用子程序CALL语句。
但它们受到2KB范围的约束。
所以必须将整个程序存储器以2KB为单位进行分页。
PIC16F877A单片机的上电复位地址是0000H,中端口地址是0004H,中断产生时PC指针会自动指向该地址。
在进行中断应用时,特别是涉及多个中断同时打开时,必须要逐个对中断标志进行判断。
编程时,在0000H-0003H单元内要放置一条GOTO跳转指令,跳转到主程序,以避开0004H存储器单元。
2.数据存储器数据存储器PIC单片机的数据存储器与传统的MCS-51单片机一样,在配置结构上可分为通用寄存器和特殊功能寄存器两大类。
基于PIC16F877A自动太阳跟踪器的设计
基于PIC16F877A自动太阳跟踪器的设计
光伏发电能为人类提供可持续能源,并保护赖以生存的环境,但其发
电效率低,发电成本相对较高仍然足制约其大规模应用的重要因素。
在没有出
现高效的光伏电池材料之前,研制具有实用价值太阳聚光器及自动跟踪系统以
实现低成本,则是促进太阳能广泛应用的主要途径之一。
一般双轴系统可提高
发电量35%左右,单轴系统可提高20%左右,聚光型跟踪系统会更高。
国外在20 世纪80 年代就对太阳跟踪系统进行了研究,如美国、德国在单双轴自动跟踪、F1 本在聚光菲立尔透镜跟踪、西班牙在2 倍聚光反射跟踪等方面均开发出了相应的商品化自动太阳跟踪器。
我国于20 世纪90 年代左右也对其进行了大量的研究,2006 年10 月在西藏羊八井安装了4 套共计13.2 kW 不同形式的单、双轴并网发电太阳自动跟踪系统。
之前一直没有稳定可靠的商
品化的产品出现,究其原因主要有:
(1)系统可靠性不能满足要求
由于大部分光伏电站都安装在偏远地区,环境非常恶劣,维护困难,跟
踪系统增加了旋转机构与相应的机械机构,可靠性明显下降,如果不能保证整
个系统的在各种环境下都能可靠稳定运行,对整个光伏电站来说都可能将是灾
难性的打击。
(2)跟踪误差大
尤其对反射聚光的跟踪系统,如果跟踪误差大,不但不能提高发电效率,反而会使电池板受光小均,产乍热斑等影响,大大缩短了电池板的使用寿命。
(3)成本过高
全部购买国外成熟的技术,将大大提高系统的硬件成本与维护成本。
本文基于PIC16F877 微处理器为核心,针对光伏发电系统,开发出一种。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PIC16F877A的特殊功能配置CPU的特殊功能
BIT13CP:闪存程序存储器代码保护位
0:所有程序存储器代码保护
1:关闭代码保护
BIT12Unimplemented:读时为结果为1
BIT11DEBUG:在电路调试模式位
0:在电路调试功能有效,RB6和RB7专用于调试器
1:在电路调试功能失效,RB6和RB7用于本身的IO或其它功能BIT10-9WRT1-0:闪存程序存储器写使能位
WRT1WRT0说明
11写保护关闭,所有程序存储器由EECON控制写
100000h到00ffh写保护;0100h到1fffh由EECON控制写010000h到07ffh写保护;0800h到1fffh由EECON控制写000000h到0fffh写保护;1000h到1fffh由EECON控制写BIT8CPD:数据EEPROM存储器代码保护位
0:数据EEPROM存储器代码保护开启
1:数据EEPROM存储器代码保护关闭
BIT7LVP:低电压(单电源)的在线串行编程使能位
0:RB3/PGM是普通IO口功能,编程时MCLR管脚必须是高电压1:RB3/PGM是PGM功能,低电压编程使能
BIT6BOREN:欠压复位使能位
0:欠压复位失效
1:欠压复位使能
BIT5-4Unimplemented:读时结果为1
BIT3PWRTEN:上电延时定时器使能位
0:上电延时定时器使能
1:上电延时定时器失效
BIT2WDTEN:看门狗定时器使能位
0:看门狗失效
1:看门狗使能
BIT1-0:Fosc1:Fosc0:时钟源选择位
Fosc1Fosc0时钟源11RC振荡器
10外部石英高频晶振HS【频率范围见下表】01外部石英晶振XT【频率范围见下表】
00外部低频石英晶振LP【频率范围见下表】。