❶ PIC 18 单片机能不能达到时钟频率40M,指令周期为一个时钟
能达到40M,这是最高的,而且需要内部PLL锁相环倍频才能得到的。
但PIC单片机达不到一个指令周期为一个时钟周期。PIC16/18系列单片机是一只指令周期为四个时钟周期。而PIC24单片机是一个指令周期为两个时钟周期。
❷ pic18f系列单片机用什么软件可以读取芯片里面的资料
就用原公司的MPLAB 软件,ICD2/ICD3/PICKIT2/PICKIT3就可以,但是有个前提,芯片是未加密的才能读出来。如果是加密的,那就只能破解了。
❸ pic18f单片机,4*4键盘输入4个值,在LCD上显示出四个值的程序
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define dd P0
sbit Rs=P0^0;
sbit Rw=P0^1;
sbit E=P0^2;
uchar key_led;
unsigned char code disp_code[]={"0123456789abcdef"};
unsigned char code key_code[]={
0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77 };//注意这里你自己看下你电路是怎么连得,对应改一下表单里的值
/*******************************************************************/
/*
*/
/* 延时子程序
*/
/*
*/
/*******************************************************************/
void delay(int ms)
{
int i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void delay_1ms(unsigned char i) //最小延时1ms
{ unsigned char j;
while(i--)
for(j=0;j<125; j++);
}
void delay_10ns(unsigned char i) //最小延时10ns
{
unsigned char j;
while(i--)
for(j=0;j<10; j++);
}
void write_com(unsigned char com,bit p) //写指令
{if(p)
delay_10ns(5);
E=0;
Rs=0;
Rw=0;
dd=com;
delay_10ns(50); //>40ns
E=1;
delay_1ms(2); //>150ns
E=0;
delay_10ns(4); //>25+10ns
}
void write_date(unsigned char data) //写数据
{
delay_10ns(50);
E=0;
Rs=1;
Rw=0;
dd=data;
delay_10ns(50);
E=1;
delay_10ns(50);
E=0;
delay_10ns(4);
}
void addr_x_y(unsigned char x,bit y) //写坐标,定位置
{
unsigned char temp=0x80;
if(y)
{
temp|=0x40;
}
temp|=x;
write_com(temp,0);
}
void desplay_char(unsigned char x,bit y,unsigned char p)
//在指定位置显示一个字符。
{
addr_x_y(x,y);
write_date(p);
}
void lcd_init(void)
{
delay_1ms(15);
write_com(0x38,0);
delay_1ms(5);
write_com(0x38,0);
delay_1ms(5);
write_com(0x38,0);
delay_1ms(5);
write_com(0x38,1);
write_com(0x08,1);
write_com(0x01,1);
write_com(0x06,1);
write_com(0x0c,1);
}
/**********************************************************
键盘扫描子函数
**********************************************************/
uchar keyscan()
{
uchar scan1,scan2,keycode,j;
P1=0xf0;
scan1=P1;
if((scan1&0xf0)!=0xf0) //判键是否按下
{
delay(30); //延时30ms
scan1=P1;
if((scan1&0xf0)!=0xf0) //二次判键是否按下
{
P1=0x0f;
scan2=P1;
keycode=scan1|scan2; //组合成键编码
for(j=0;j<=15;j++)
{
if(keycode== key_code[j]) //查表得键值
{
delay(30);
key_led=j;
}
}
}
}
else return(16) ;
}
/**********************************************************
判键是否按下子函数
**********************************************************/
void keydown()
{
P1=0xf0;
if((P1&0xf0)!=0xf0)
{
keyscan();
}
}
/*******************************************************************/
/*
*/
/* 主程序
*/
/*
*/
/*******************************************************************/
void main(void)
{
lcd_init(); // 初始化lcd
key_led=16;
while(1)
{
keydown();
desplay_char(0,0,disp_code[key_led]);
}
}
❹ 求pic18单片机串口接收多字节代码
#include <p18cxxx.h>
#pragmaconfigOSC=HS,OSCS=OFF
#pragmaconfigPWRT=OFF,BOR=OFF
#pragmaconfigWDT=OFF
#pragmaconfigDEBUG=ON
#pragmaconfigLVP=OFF
volatile unsigned charreceiver_buffer;
void usart_isr(void);
#pragma code low_vector=0x18
void low_interrupt (void)
{_asm
goto usart_isr
_endasm
}
#pragma code
#pragma interruptlow usart_isr
void usart_isr (void)
{receiver_buffer=RCREG;} //中断入口就是要求放一个GOTO 跳转指令,中断服务函数用关键词定义,
void main(void)
{while(1){
//IO 初始化
//RB0,RB1,RB2,RB3->output
//RC6,RC7 ->input
PORTB=0x00;
TRISB=0x00;
TRISC=0xc0;
//波特率初始化9600
//Fosc=4MHZ
//BRGH=1
SPBRG=25;
//串口工作方式使能
TXSTAbits.SYNC=0;
TXSTAbits.BRGH=1;
TXSTAbits.TX9=0;
RCSTAbits.SPEN=1;
RCSTAbits.RX9=0;
//中断使能
INTCONbits.GIE=1;
INTCONbits.PEIE=1;
PIE1bits.RCIE=1;
PIE1bits.TXIE=0;
//接收使能
RCSTAbits.CREN=1;
while(1){
//判断接收字节是否为0x55
//是,点LED
//否,继续等待
if(receiver_buffer==0x55){
PORTBbits.RB0=1;
//发送使能
TXSTAbits.TXEN=1;
TXREG=0x55;
}
else
PORTBbits.RB0=0;
}
}
}
❺ PIC18单片机的优点
1,与PIC16相比,PIC18晶振频率更高,换句话说是速度更快,外设资源也更丰富了,基本架构是一样的。
2,与51系列相比,pic单片机综合性能优于51单片机。具体优势如下:
(1)总线结构:MCS-51的总线结构是冯-诺依曼型,计算机在同一个存储空间取指令和数据,两者不能同时进行;而PIC的总线结构是哈佛结构,指令和数据空间是完全分开的,一个用于指令,一个用于数据,由于可以对程序和数据同时进行访问,所以提高了数据吞吐率。
(2)流水线结构:MCS-51的取指和执行采用单指令流水线结构,即取一条指令,执行完后再取下一条指令;而PIC的取指和执行采用双指令流水线结构,当一条指令被执行时,允许下一条指令同时被取出,这样就实现了单周期指令。
(3)寄存器组:PIC的所有寄存器,包括I/O口,定时器和程序计数器等都采用RAM结构形式,而且都只需要一个指令周期就可以完成访问和操作;而MCS-51需要两个或两个以上的周期才能改变寄存器的内容。
❻ PIC18系列单片机
目前MICROCHIP公司推出了最新的16增强版,如PIC16F1947,其程序空间比887大了一倍,从原来的8k字提高到16K字,RAM从原来的368字节提高到1024,SPI,IIC和UART也增加到了2个.时钟的最高频率也从原来的20MHz增加到32MHz,还有好多的性能上的增强.关键是,如果你用的是PICC编程,9.8的版本也支持这些新的芯片.价格还与887差不多,有的比887还便宜!
也就是说,你没必要用18的了,只要用16的增强型就可以了!
建议你用PIC16F1939,引脚与887完全兼容,它的主要参数如下:
程序16K字,批量价为$1.61,其他参数不低于887,而887批量价为$1.78.
❼ pic18F系列单片机中的实时时钟工作原理有谁能简单解释一下吗
实时时钟都有一个时钟晶振,频率为32.768kHz,这个频率下计数到达了0x8000(十进制的32768)溢出,刚好是1s。
通常要定义一个时间结构体,如下:
struct { unsigned SECOND:6;
unsigned MINUTE:6;
unsigned HOUR:5;
unsigned DAY:5;
unsigned WEEKDAY:3;
unsigned MONTH:4;
unsigned YEAR:7;
}TIME;
在每秒中断服务程序里,秒数不断加1,每次加1都要判断是否达到了60,如果达到60,让秒清0,让分钟进1,并判断分钟是否达到了60,如果达到让分钟清0,时进1,再判断时是否超过当月的最大天数(要判断是哪个月,如是2月份还要判断是否闰月)。。。
后面就不说了。现在知道实时时钟的大概原理吧?
上面说的是用单片机加时钟晶振的实时时钟,如果用实时时钟芯片,如DS1307,就简单多了,只要有个时钟晶振,单片机去读取DS1307内存值就知道时钟值了,这个也就不讲了。
❽ 目前流行的PIC单片机都有哪些
看到你这个问题,我正在想什么叫流行?也许别人用的多就叫流行,对吧?
要是从这个角度来说的话,PIC16Fxxxx系列和PIC18Fxxxx系列的单片机可能用得比较多一些,典型的如PIC16F877、PIC18F4520,很多开发板就是这两个处理器。
(1)PIC16Fxxxx:具有丰富的内部模块、完善的指令系统和良好的向下兼容性。是适合初学者入门的系列。
(2)PIC18Fxxxx:搞笑的16位指令系统,大容量的ROM和RAM结构使其更适合C语言编程。更为丰富的内部模块和8位的硬件乘法器使其具备DSP的性能,学习的高级阶段。
以上说的都是8位MCU,当然PIC单片机从8位、16位、32位的单片机都有,最简单、最基础的还是8位MCU,当你把8位单片机学精通的话再学高档的就如虎添翼了。
❾ 请问什么编译器能够编译PIC单片机的18F系列
你好!
picc18是可以编译18f系列的。我刚试过了。看看在建工程时是不是选对型号了。一定要保证建工程时选对型号。在其他地方改型号是不可以的。另外,头文件要用pic18系列,即程序第一句是#include
.你再试试,看行不行。
如有疑问,请追问。
❿ PIC18F1220 单片机是几位单片机
8位单片机。其余信息摘自PIC18F1220/1320说明文档:
Low-Power Features: Peripheral Highlights:
* Power Managed modes: * High current sink/source 25 mA/25 mA
- Run: CPU on, peripherals on * Three external interrupts
- Idle: CPU off, peripherals on * Enhanced Capture/Compare/PWM (ECCP) mole:
- Sleep: CPU off, peripherals off - One, two or four PWM outputs
* Power Consumption modes: - Selectable polarity
- PRI_RUN: 150 μA, 1 MHz, 2V - Programmable dead time
- PRI_IDLE: 37 μA, 1 MHz, 2V - Auto-Shutdown and Auto-Restart
- SEC_RUN: 14 μA, 32 kHz, 2V - Capture is 16-bit, max resolution 6.25 ns (TCY/16)
- SEC_IDLE: 5.8 μA, 32 kHz, 2V - Compare is 16-bit, max resolution 100 ns (TCY)
- RC_RUN: 110 μA, 1 MHz, 2V * Compatible 10-bit, up to 13-channel Analog-to-
Digital Converter mole (A/D) with programmable
- RC_IDLE: 52 μA, 1 MHz, 2V
acquisition time
- Sleep: 0.1 μA, 1 MHz, 2V
* Enhanced USART mole:
* Timer1 Oscillator: 1.1 μA, 32 kHz, 2V
- Supports RS-485, RS-232 and LIN 1.2
* Watchdog Timer: 2.1 μA
- Auto-Wake-up on Start bit
* Two-Speed Oscillator Start-up
- Auto-Baud Detect
Oscillators:
Special Microcontroller Features:
* Four Crystal modes:
* 100,000 erase/write cycle Enhanced Flash
- LP, XT, HS: up to 25 MHz
program memory typical
- HSPLL: 4-10 MHz (16-40 MHz internal)
* 1,000,000 erase/write cycle Data EEPROM
* Two External RC modes, up to 4 MHz
memory typical
* Two External Clock modes, up to 40 MHz
* Flash/Data EEPROM Retention: > 40 years
* Internal oscillator block:
* Self-programmable under software control
- 8 user-selectable frequencies: 31 kHz, 125 kHz,
* Priority levels for interrupts
250 kHz, 500 kHz, 1 MHz, 2 MHz, 4 MHz, 8 MHz
* 8 x 8 Single-Cycle Hardware Multiplier
- 125 kHz to 8 MHz calibrated to 1%
* Extended Watchdog Timer (WDT):
- Two modes select one or two I/O pins
- Programmable period from 41 ms to 131s
- OSCTUNE – Allows user to shift frequency
- 2% stability over VDD and Temperature
* Secondary oscillator using Timer1 @ 32 kHz
* Single-supply 5V In-Circuit Serial Programming(TM)
* Fail-Safe Clock Monitor
(ICSP(TM)) via two pins
- Allows for safe shutdown if peripheral clock stops
* In-Circuit Debug (ICD) via two pins
* Wide operating voltage range: 2.0V to 5.5V