PIC16F1824有什么C编译器能用?
本帖最后由 1125526801 于 2013-6-15 09:24 编辑PIC16F1824有什么C编译器能用?之前学习板上的单片机不一样是18F4520,用的MCC18。PIC16F1824是用PICC吗?
我用的PICC9.71A。 XC8破解了谁还用PICC那个老掉牙的东西? 老不见得就不好,够用就可以了,不必盲目追高,新版编译器有可能BUG会多一些。 i55x 发表于 2013-6-14 15:31 static/image/common/back.gif
XC8破解了谁还用PICC那个老掉牙的东西?
Sir:
Where is the "XC8破解"?
Thank you. 本帖最后由 1125526801 于 2013-6-15 09:25 编辑
前辈们,PIC16F1824,帮忙给个流水灯程序吧。。。折腾了一天都没亮灯。。。。实然觉得学了几年STC白学了。。。。。。。。。
头文件PIC16F1824.h
本帖最后由 1125526801 于 2013-6-14 18:52 编辑
电路图。#include <pic16f1824.h> //调用头文件,
//---------------------------------------
//名称: 主函数
//-----------------------------------------
void main(void)
{
TRISA=0B00000000; //RA设置为输出
TRISC=0B00000000; //RC设置为输出
PORTC=0B00000000; //RA的LED全亮
PORTA=0B00000000; //RC的LED全亮
}难道还要配置时钟?怎么配置?内部时钟。 难道还要配置时钟?怎么配置?内部时钟。
read the datasheet and then read the compiler manual.
no other way out.
谁还用PICC那个老掉牙的东西?
I do. CCS也不错 一直使用PICC的路过. config1 config2需要配置的 millwood0 发表于 2013-6-14 21:30 static/image/common/back.gif
read the datasheet and then read the compiler manual.
no other way out.
ok,thank you 本帖最后由 1125526801 于 2013-6-15 09:38 编辑
yklstudent 发表于 2013-6-14 23:10 static/image/common/back.gif
config1 config2需要配置的
除了学习板上的18F4520我还没用过其它PIC单片机。装了XC8免费版后,才找到PIC16F1824.h头文件。发现照搬之前的时钟配置
config过来用不了。打开之前用的PIC.h和现在的PIC16F1824.h对比,差远了。。。。
时钟不知道怎么配置。在DEBUG状态LED是能亮了。拔了仿真,直接给电不会运行。
头文件的部分:// Register: OSCCON
extern volatile unsigned char OSCCON @ 0x099;
#ifndef _LIB_BUILD
asm("OSCCON equ 099h");
#endif
// bitfield definitions
typedef union {
struct {
unsigned SCS0 :1;
unsigned SCS1 :1;
unsigned :1;
unsigned IRCF0 :1;
unsigned IRCF1 :1;
unsigned IRCF2 :1;
unsigned IRCF3 :1;
unsigned SPLLEN :1;
};
struct {
unsigned SCS :2;
unsigned :1;
unsigned IRCF :4;
};
} OSCCONbits_t;
extern volatile OSCCONbits_t OSCCONbits @ 0x099;
// bitfield macros
#define _OSCCON_SCS0_POSN 0x0
#define _OSCCON_SCS0_POSITION 0x0
#define _OSCCON_SCS0_SIZE 0x1
#define _OSCCON_SCS0_LENGTH 0x1
#define _OSCCON_SCS0_MASK 0x1
#define _OSCCON_SCS1_POSN 0x1
#define _OSCCON_SCS1_POSITION 0x1
#define _OSCCON_SCS1_SIZE 0x1
#define _OSCCON_SCS1_LENGTH 0x1
#define _OSCCON_SCS1_MASK 0x2
#define _OSCCON_IRCF0_POSN 0x3
#define _OSCCON_IRCF0_POSITION 0x3
#define _OSCCON_IRCF0_SIZE 0x1
#define _OSCCON_IRCF0_LENGTH 0x1
#define _OSCCON_IRCF0_MASK 0x8
#define _OSCCON_IRCF1_POSN 0x4
#define _OSCCON_IRCF1_POSITION 0x4
#define _OSCCON_IRCF1_SIZE 0x1
#define _OSCCON_IRCF1_LENGTH 0x1
#define _OSCCON_IRCF1_MASK 0x10
#define _OSCCON_IRCF2_POSN 0x5
#define _OSCCON_IRCF2_POSITION 0x5
#define _OSCCON_IRCF2_SIZE 0x1
#define _OSCCON_IRCF2_LENGTH 0x1
#define _OSCCON_IRCF2_MASK 0x20
#define _OSCCON_IRCF3_POSN 0x6
#define _OSCCON_IRCF3_POSITION 0x6
#define _OSCCON_IRCF3_SIZE 0x1
#define _OSCCON_IRCF3_LENGTH 0x1
#define _OSCCON_IRCF3_MASK 0x40
#define _OSCCON_SPLLEN_POSN 0x7
#define _OSCCON_SPLLEN_POSITION 0x7
#define _OSCCON_SPLLEN_SIZE 0x1
#define _OSCCON_SPLLEN_LENGTH 0x1
#define _OSCCON_SPLLEN_MASK 0x80
#define _OSCCON_SCS_POSN 0x0
#define _OSCCON_SCS_POSITION 0x0
#define _OSCCON_SCS_SIZE 0x2
#define _OSCCON_SCS_LENGTH 0x2
#define _OSCCON_SCS_MASK 0x3
#define _OSCCON_IRCF_POSN 0x3
#define _OSCCON_IRCF_POSITION 0x3
#define _OSCCON_IRCF_SIZE 0x4
#define _OSCCON_IRCF_LENGTH 0x4
#define _OSCCON_IRCF_MASK 0x78
// Register: OSCSTAT
extern volatile unsigned char OSCSTAT @ 0x09A;
#ifndef _LIB_BUILD
asm("OSCSTAT equ 09Ah");
#endif
// bitfield definitions
typedef union {
struct {
unsigned HFIOFS :1;
unsigned LFIOFR :1;
unsigned MFIOFR :1;
unsigned HFIOFL :1;
unsigned HFIOFR :1;
unsigned OSTS :1;
unsigned PLLR :1;
unsigned T1OSCR :1;
};
} OSCSTATbits_t;
extern volatile OSCSTATbits_t OSCSTATbits @ 0x09A;
// bitfield macros
#define _OSCSTAT_HFIOFS_POSN 0x0
#define _OSCSTAT_HFIOFS_POSITION 0x0
#define _OSCSTAT_HFIOFS_SIZE 0x1
#define _OSCSTAT_HFIOFS_LENGTH 0x1
#define _OSCSTAT_HFIOFS_MASK 0x1
#define _OSCSTAT_LFIOFR_POSN 0x1
#define _OSCSTAT_LFIOFR_POSITION 0x1
#define _OSCSTAT_LFIOFR_SIZE 0x1
#define _OSCSTAT_LFIOFR_LENGTH 0x1
#define _OSCSTAT_LFIOFR_MASK 0x2
#define _OSCSTAT_MFIOFR_POSN 0x2
#define _OSCSTAT_MFIOFR_POSITION 0x2
#define _OSCSTAT_MFIOFR_SIZE 0x1
#define _OSCSTAT_MFIOFR_LENGTH 0x1
#define _OSCSTAT_MFIOFR_MASK 0x4
#define _OSCSTAT_HFIOFL_POSN 0x3
#define _OSCSTAT_HFIOFL_POSITION 0x3
#define _OSCSTAT_HFIOFL_SIZE 0x1
#define _OSCSTAT_HFIOFL_LENGTH 0x1
#define _OSCSTAT_HFIOFL_MASK 0x8
#define _OSCSTAT_HFIOFR_POSN 0x4
#define _OSCSTAT_HFIOFR_POSITION 0x4
#define _OSCSTAT_HFIOFR_SIZE 0x1
#define _OSCSTAT_HFIOFR_LENGTH 0x1
#define _OSCSTAT_HFIOFR_MASK 0x10
#define _OSCSTAT_OSTS_POSN 0x5
#define _OSCSTAT_OSTS_POSITION 0x5
#define _OSCSTAT_OSTS_SIZE 0x1
#define _OSCSTAT_OSTS_LENGTH 0x1
#define _OSCSTAT_OSTS_MASK 0x20
#define _OSCSTAT_PLLR_POSN 0x6
#define _OSCSTAT_PLLR_POSITION 0x6
#define _OSCSTAT_PLLR_SIZE 0x1
#define _OSCSTAT_PLLR_LENGTH 0x1
#define _OSCSTAT_PLLR_MASK 0x40
#define _OSCSTAT_T1OSCR_POSN 0x7
#define _OSCSTAT_T1OSCR_POSITION 0x7
#define _OSCSTAT_T1OSCR_SIZE 0x1
#define _OSCSTAT_T1OSCR_LENGTH 0x1
#define _OSCSTAT_T1OSCR_MASK 0x80
millwood0 发表于 2013-6-14 21:30 static/image/common/back.gif
I do.
me too.{:sweat:} MPLAB应该可以! 本帖最后由 xiongh 于 2013-6-15 10:20 编辑
MPLAB X+ PICC挺好用。
#include "pic.h"
#include <htc.h>
__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_ON & FCMEN_OFF);
__CONFIG(WRT_OFF & PLLEN_ON & STVREN_ON & BORV_LO & LVP_OFF);
现在正在用PIC16F1824做项目,8路AD全用了,还有一路PWM。 xiongh 发表于 2013-6-15 10:18 static/image/common/back.gif
MPLAB X+ PICC挺好用。
#include "pic.h"
#include
好的,谢谢。我试试看。 xiongh 发表于 2013-6-15 10:18 static/image/common/back.gif
MPLAB X+ PICC挺好用。
#include "pic.h"
#include
#include <pic16f1824.h> //调用头文件,
#include "pic.h"
#include <htc.h>
__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_ON & FCMEN_OFF);
__CONFIG(WRT_OFF & PLLEN_ON & STVREN_ON & BORV_LO & LVP_OFF);
编译不成功:
Build E:\PIC\PIC_1824E\PIC_1824E for device 16F1824
Using driver C:\Program Files (x86)\Microchip\xc8\v1.12\bin\xc8.exe
Make: The target "E:\PIC\PIC_1824E\main.p1" is up to date.
Executing: "C:\Program Files (x86)\Microchip\xc8\v1.12\bin\xc8.exe" -oPIC_1824E.cof -mPIC_1824E.map --summary=default,-psect,-class,+mem,-hex --output=default,-inhx032 main.p1 --chip=16F1824 "-IC:\Program Files (x86)\Microchip\xc8\v1.12\include" "-IC:\Program Files (x86)\HI-TECH Software\PICC\std\9.60\include" -P --runtime=default,+clear,+init,-keep,+osccal,-download,-resetbits,-stackcall,-config,+clib,+plib --opt=default,+asm,-debug,-speed,+space,9 --warn=0 -N255 -D__DEBUG=1 --debugger=pickit3 -Bsmall --double=32 --float=32 --addrqual=ignore -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
Microchip MPLAB XC8 C Compiler V1.12
Copyright (C) 2012 Microchip Technology Inc.
License type: Node Configuration
Warning ; . Omniscient Code Generation not available in Free mode
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 339. undefined symbol "FCMEN_OFF"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 339. undefined symbol "IESO_ON"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 339. undefined symbol "CLKOUTEN_OFF"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 339. undefined symbol "BOREN_OFF"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 339. undefined symbol "CPD_OFF"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 339. undefined symbol "CP_OFF"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 339. undefined symbol "MCLRE_ON"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 339. undefined symbol "PWRTE_OFF"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 339. undefined symbol "WDTE_OFF"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 339. undefined symbol "FOSC_INTOSC"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 343. undefined symbol "LVP_OFF"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 343. undefined symbol "BORV_LO"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 343. undefined symbol "STVREN_ON"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 343. undefined symbol "PLLEN_ON"
Error C:\Users\guoliang\AppData\Local\Temp\ss2k.; 343. undefined symbol "WRT_OFF"
(908) exit status = 1
********** Build failed! ********** 本帖最后由 1125526801 于 2013-6-15 14:08 编辑
xiongh 发表于 2013-6-15 10:18 static/image/common/back.gif
MPLAB X+ PICC挺好用。
#include "pic.h"
#include
#include<pic.h>
__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_ON&CPD_OFF&BOREN_ON&CLKOUTEN_OFF&IESO_ON&FCMEN_ON);
__CONFIG(PLLEN_OFF&LVP_OFF) ;//将FOSC<2:0>:振荡器选择位设置成 INTOSC,
void init_fosc(void)
{
OSCCON = 0x70;//8MHZ IRCF<3:0>时钟频率选择位设置成8MHZ
}谢谢大家!终于找到个能用的了。。。不过暂时还不能理解。 xiongh 发表于 2013-6-15 10:18 static/image/common/back.gif
MPLAB X+ PICC挺好用。
#include "pic.h"
#include
就RA3的灯没亮,为啥子呢{:dizzy:}
#include<pic.h>
__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_ON&CPD_OFF&BOREN_ON&CLKOUTEN_OFF&IESO_ON&FCMEN_ON);
__CONFIG(PLLEN_OFF&LVP_OFF) ;//将FOSC<2:0>:振荡器选择位设置成 INTOSC,
void init_fosc(void)
{
OSCCON = 0x70;//8MHZ IRCF<3:0>时钟频率选择位设置成8MHZ
}
void delay500ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=20;c>0;c--)
for(b=152;b>0;b--)
for(a=7;a>0;a--);
}
//---------------------------------------
//名称: 主函数
//-----------------------------------------
void main()
{
init_fosc();
TRISA=0B00000000; //RA设置为输出
TRISC=0B00000000; //RC设置为输出
PORTC=0x00; //RA的LED全不亮
PORTA=0x00; //RC的LED全不亮
while(1)
{
PORTC=0x00;
delay500ms();
PORTC=0xff;
delay500ms();
PORTA=0x00;
delay500ms();
PORTA=0xff;
delay500ms();
}
} 本帖最后由 xiongh 于 2013-6-15 15:31 编辑
看手册:
12.2 PORTA 寄存器
PORTA 是一个6 位宽的双向端口。对应的数据方向寄存
器是TRISA(寄存器12-4)。将TRISA 某位置1(= 1)
时,会将PORTA 的相应引脚为输入(即,禁止输出
驱动器)。将TRISA 某位清零(= 0)时,会将PORTA
的相应引脚设为输出(即,使能输出驱动器并将输出锁
存器中的内容输出到选定的引脚)。RA3 是个例外,它仅
可作为输入引脚,其TRIS 位总是读为1。例12-1 显示
了如何初始化PORTA。 楼上正解 xiongh 发表于 2013-6-15 15:28 static/image/common/back.gif
看手册:
12.2 PORTA 寄存器
好。谢谢!我再摸索一下。 本帖最后由 1125526801 于 2013-6-20 18:52 编辑
#include<pic.h>
__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_ON & CLKOUTEN_OFF & IESO_ON & FCMEN_OFF);
__CONFIG(WRT_OFF & PLLEN_OFF & STVREN_ON & BORV_LO & LVP_OFF);//将FOSC<2:0>:振荡器选择位设置成 INTOSC,
void init_fosc(void)
{
OSCCON = 0x70;//8MHZ IRCF<3:0>时钟频率选择位设置成8MHZ
}
void delay500ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=20;c>0;c--)
for(b=152;b>0;b--)
for(a=7;a>0;a--);
}
//---------------------------------------
//名称: 主函数
//-----------------------------------------
void main()
{
init_fosc();
TRISA=0B00000000; //RA设置为输出
TRISC=0B00000000; //RC设置为输出
PORTA=0B00000000; //初始化RA
PORTC=0B00000000; //初始化RC
while(1)
{
RC2=1;
delay500ms();
RC1=1;
delay500ms();
}
}
又出状况了。按理接在RC1和RC2的两个LED,应该是常亮的,可是实际他是交替闪。RC1=1时,RC2会自动变为0,什么情况???
一个IO置1,会让同一组的其它自动置0?试了下一如 RC2=1; RA1=1;,则不会互相影响。 估计应该是两个原因,一个是ANSELC寄存器,一个是硬件的问题。 xiongh 发表于 2013-6-15 15:28 static/image/common/back.gif
看手册:
12.2 PORTA 寄存器
while(1)
{
RC0=1;
delay500ms();
RC1=1;
delay500ms();
RC2=1;
delay500ms();
RC3=1;
delay500ms();
RC4=1;
delay500ms();
RC5=1;
delay500ms();
RA0=1;
delay500ms();
RA1=1;
delay500ms();
RA2=1;
delay500ms();
RA3=1;
delay500ms();
RA4=1;
delay500ms();
RA5=1;
delay500ms();
}只有RA5 RC4 RC5,是一直亮的,RA0~4,RC0~3,都变成流水灯了! "成流水灯了!"
If you don't try to read and understand the datasheet, you will never learn.
本帖最后由 1125526801 于 2013-6-21 09:19 编辑
millwood0 发表于 2013-6-21 04:28 static/image/common/back.gif
"成流水灯了!"
If you don't try to read and understand the datasheet, you will never learn.
我在看了,只是还没看懂,毕竟刚接触PIC,很多术语以前做STC51都没有的,一时没理解。millwood0真是全能的,在很多版区都能看到你出现哦。Excuse me
,Where are you from
?我英文比较差,只能用中文回复你,希望你能看得懂,抱歉{:lol:} 。 本帖最后由 1125526801 于 2013-6-21 09:14 编辑
millwood0 发表于 2013-6-21 04:28 static/image/common/back.gif
"成流水灯了!"
If you don't try to read and understand the datasheet, you will never learn.
OK!afteradd " ANSELA= 0x00; ANSELC= 0x00;" in.原来是数字口,模拟口的问题。很好,顺便学下英文。thank you! 本帖最后由 1125526801 于 2013-6-21 09:15 编辑
xiongh 发表于 2013-6-15 15:28 static/image/common/back.gif
看手册:
12.2 PORTA 寄存器
RA3 是个例外,它仅
可作为输入引脚。现在除了RA3,其它做数字口,都能正常使用了。谢谢提醒!不然我又以为RA3不正常,又得折腾半天了。 RA3我没有使用,专门作为复位用。
总算把LCD点亮了!{:sweat:} 原来是数字口,模拟口的问题。
Generally speaking, mcus have alternate uses for any pin. Sometimes, the power-on state / mode is not (digital) GPIO - PICs as you have found out power up in the analog mode. Other PICs may also default some of their pins for comparators.
Many PICs provide a gpio initialization sequence in the GPIO section of the datasheet, or to identify all relevant registers / bits, etc.
I always execute a routine, called mcu_init(), as the first user-space routine to reset the pins to digital IO. On some mcus, that routine could be an empty routines - AVRs for example. But it is a good idea to always have that.
millwood0 发表于 2013-6-22 06:07 static/image/common/back.gif
Generally speaking, mcus have alternate uses for any pin. Sometimes, the power-on state / mode is...
原来,手册上的引脚功能说明中,有标ANx的IO都是带有模拟输入功能的,必须将其设置为数字输出。{:smile:} 作输出用的时候 最好使用 LATx 寄存器 而不要用PORTx。 xiongh 发表于 2013-6-15 15:28 static/image/common/back.gif
看手册:
12.2 PORTA 寄存器
在学习中断,发现无论是定时器0还是定时器1还是其它,
中断程序都是这个:
void interrupt isr(void)
{
}
不像51单片机那样带有中断号来对应中断源。
难道PIC的所有中断程序都写在void interrupt isr(void)里,然后用判断语句来识别中断源吗? XC8免费版也一样用 1125526801 发表于 2013-6-24 08:49 static/image/common/back.gif
在学习中断,发现无论是定时器0还是定时器1还是其它,
中断程序都是这个:
void interrupt isr(void)
进入中断后,判断中断标志,然后确定是什么中断,再进行相应处理。 气球 发表于 2013-6-24 09:24 static/image/common/back.gif
XC8免费版也一样用
我是破解了用,代码优化好 本帖最后由 1125526801 于 2013-6-24 12:09 编辑
xiongh 发表于 2013-6-24 10:05 static/image/common/back.gif
进入中断后,判断中断标志,然后确定是什么中断,再进行相应处理。
嗯嗯。试了用if,可以。ADC和PWM输出也弄出来了。消化一下,再熟悉一下PID算法,应对准备做的项目就勉强够用了{:titter:}
PIC单片机的稳定性非常的不错,就是价格有点贵了,不过用来做工业产品不在乎这点成本。 本帖最后由 1125526801 于 2013-6-24 13:21 编辑
xiongh 发表于 2013-6-24 12:51 static/image/common/back.gif
PIC单片机的稳定性非常的不错,就是价格有点贵了,不过用来做工业产品不在乎这点成本。 ...
是有点贵,我只是想积累些PIC的经验,你看我发这个帖子时之前机根本没用过PIC。。。。调试成功后再换别的低成本MCU吧,要是找不到合适的就不换了。要求要耐高温。 PIC有自带的延时函数,完全由编译器计算生成的,
首先定义一下时钟,然后就可以直接用了,
如果用很多的延时就写一个延时函数,
#define _XTAL_FREQ 4000000 // 定义时钟频率为4M
void delay_ms(uint16_t xms)
{
for(;xms!=0;xms--)
{
__delay_us(986);
}
}
注意__delay_us和__delay_ms是两根下划线的,
其中_delay()是延时指令周期时间,一根下划线 chengzepeng 发表于 2013-6-24 15:32 static/image/common/back.gif
PIC有自带的延时函数,完全由编译器计算生成的,
首先定义一下时钟,然后就可以直接用了,
如果用很多的延 ...
哦!原来这样啊,我还按51单片机的写,然后接上示波器调整。。。。 用PICC9.8的吧 本帖最后由 1125526801 于 2013-6-25 20:20 编辑
xiongh 发表于 2013-6-15 10:18 static/image/common/back.gif
MPLAB X+ PICC挺好用。
#include "pic.h"
#include
一般PIC的ADC输入,需要加RC滤波吗?我直接从电位器采样,只加了只103电容。我那小板实验做了两通道输入。
while(1)
{
test=ADC_BAT_contiue(0);//ADC0转换
Numshow_XY(2,0,test); //显示转换结果
test=ADC_BAT_contiue(1);//ADC1转换
Numshow_XY(6,0,test); //显示转换结果
delay20ms();
}
我在学习PPM输出,用CCP1做半桥输出,CCP2做呼吸灯。同时使用,按照手册需要设置寄存器CCPTMRSx来选择使用的定时器资源。
但是编译不过,提示CCPTMRS0未定义。后来改成CCPTMRS搞定了:CCPTMRS=0b11110100;//给CCP1和CCP2选择定时器资源。
1125526801 发表于 2013-6-25 17:55 static/image/common/back.gif
一般PIC的ADC输入,需要加RC滤波吗?我直接从电位器采样,只加了只103电容。我那小板实验做了两通道 ...
可以采用软件滤波 本帖最后由 1125526801 于 2013-6-25 22:11 编辑
xiongh 发表于 2013-6-25 21:10 static/image/common/back.gif
可以采用软件滤波
嗯。现在我那103电容也去了,是采样8次平均,做软件滤波,挺稳定的了。所用的两路AD都跟ICSPI有关,加了电容没法下载了。没加电容,也比STC的ADC稳定多了,以前玩STC的12C5A60S2,加了RC,还得采样30次以上做软件滤波效果才满意。 yoyobbs 发表于 2013-6-14 22:46 static/image/common/back.gif
一直使用PICC的路过.
我试了下,用PICC和XC8编译同一个工程,XC8优化好像要好点。(都是和谐过的)
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode)V9.80:
Microchip MPLAB XC8 C Compiler V1.12:
本帖最后由 1125526801 于 2013-6-26 19:05 编辑
xiongh 发表于 2013-6-21 09:47 static/image/common/back.gif
RA3我没有使用,专门作为复位用。
哥,看看我的EEPROM读写错哪了?读应该对的,我用kit3写入EEPROM,能正确读出来。但是写了数据无效。{:sad:}
void EEPROM_write(uchar add,uchar dat)//add为0x00~0xff
{
EEADRL = add; //地址写入EEADRL 寄存器
EEDATL = dat; //将数据写入EEDATL 寄存器
//对写操作进行解锁
EECON2 = 0x55;//先将 55h 写入 EECON2,
EECON2 = 0xaa;//随后将 AAh 写入 EECON2
EECON1 = 0b00000110;//然后再将 EECON1中的WREN位置1 以使能写操作
EECON1 = 0b00000010;//最后将 WR位(bit 1)置 1
}
uchar EEPROM_read(uchar add)//add为0x00~0xff
{
uchar dat_tmep = 0;
EEADRL = add;//写要要读的地址
EECON1 = 0b00000001; //清零EECON1寄存器的EEPGD 和CFGS 控制位,然后将控制位RD 置1。
// bit7 bit6 bit0
dat_tmep=EEDATL;//读出地址add上的数据
return dat_tmep;
}
本帖最后由 1125526801 于 2013-6-26 20:04 编辑
1125526801 发表于 2013-6-26 18:44 static/image/common/back.gif
哥,看看我的EEPROM读写错哪了?读应该对的,我用kit3写入EEPROM,能正确读出来。但是写了数据无效。{:sa ...
{:sweat:} 硬着头皮一边百度一边翻译手册上的汇编例程,终于成功写入EEPROM!看来汇编还是有必要去了解一下。
突然觉悟:学会了看STC的数据手册,不代表你能看懂PIC的手册。。。不过,当真的学会了用一种PIC的MCU,PIC的其它MCU应该不难了吧,但愿。
void EEPROM_write(uchar add,uchar dat)//add为0x00~0xff
{
EEADRL = add; //地址写入EEADRL 寄存器
EEDATL = dat; //将数据写入EEDATL 寄存器
CFGS = 0;//EECON1
EEPGD = 0;
WREN = 1;
GIE = 0;
//对写操作进行解锁
EECON2 = 0x55;//先将 55h 写入 EECON2,
EECON2 = 0xaa;//随后将 AAh 写入 EECON2
WR = 1;
GIE = 1;
WREN = 0;
while(WR);//Wait for write to complete
}
The unlock sequence is outlined in the datasheet. Other peripherals (like RTCC) have similiar mechanism to prevent accidental write to them. You should implement that in assembly (as there are fairly strict timing requirements for those sequences that your compiler may not be able to meet), and repeat the sequence until a write is successful.
This is an example of why reading the datasheet is invaluable.
You cannot be a good embedded programmer if you cannot read and more importantly understand the datasheet. 本帖最后由 1125526801 于 2013-6-27 09:00 编辑
millwood0 发表于 2013-6-26 20:20 static/image/common/back.gif
This is an example of why reading the datasheet is invaluable.
You cannot be a good embedded progra ...
Iread it, but Idon't understand because thar text description for sequence is not very clear. and I cannot read assembly language,it is a big drawback for me.
In the PIC datasheet, all the examples are written in assembly language. 本帖最后由 1125526801 于 2013-6-27 09:02 编辑
millwood0 发表于 2013-6-26 20:20 static/image/common/back.gif
The unlock sequence is outlined in the datasheet. Other peripherals (like RTCC) have similiar mechan ...
不好意思,昨晚这段英文还没读懂。。。。{:dizzy:}
今天早上特意下载了个词典翻译了一下,不知道对了没:
The unlock sequence is outlined in the datasheet.
解锁序列数据手册中已列出。
Reply: oh yes, I see it.
另外,开始我并不知道EECON1原来是需要位操作:
CFGS = 0;//EECON1
EEPGD = 0;//EECON1
WREN = 1;//EECON1
GIE = 0;//EECON1
而我之前是字节操作,如:EECON1 = 0b00000010;//最后将 WR位(bit 1)置 1
显然这和正确的时序是不一样的,所以写入不成功。后来边学边看,终于大概看明白了汇编时序例程,跟着他的时序写成C,才成功写入EEPROM。
Other peripherals (like RTCC) have similiar mechanism to prevent accidental write to them.
其他外围设备(如RTCC)也有类似的机制来防止它们被意外误写。
You should implement that in assembly (as there are fairly strict timing requirements for those sequences that your compiler may not be able to meet), and repeat the sequence until a write is successful.
你应该用汇编来实现(这些序列有相当严格的时间要求,你的编译器可能无法满足),并重复这个过程直到写操作成功。
1125526801 发表于 2013-6-26 16:51 static/image/common/back.gif
我试了下,用PICC和XC8编译同一个工程,XC8优化好像要好点。(都是和谐过的)
HI-TECH C Compiler for P ...
PIC的编译XC上我没试过,但是在PIC9.8与8.05上编译,9.8确实优化得比较好.
另外,PIC在高版本的编译器上,对bank的处理与8.05略有不同. PIC_1824E - 12864S&ADC&time0&PWM&EEPROM
程序上传一下,留着以后用
1125526801 发表于 2013-6-14 18:16
前辈们,PIC16F1824,帮忙给个流水灯程序吧。。。折腾了一天都没亮灯。。。。实然觉得学了几年STC白学了。 ...
非常感谢上传了中文版手册,我英语比较差,看的头晕。。。。多谢 zenghouyun 发表于 2016-12-12 16:29
非常感谢上传了中文版手册,我英语比较差,看的头晕。。。。多谢
转眼过去好几年了,喜欢就好{:lol:} 。 楼主你这个板子手里还有吗,淘宝了一圈没找到 活到老学到老 发表于 2017-4-7 22:56
楼主你这个板子手里还有吗,淘宝了一圈没找到
好久之前的了,早不知道哪里去了。你可以画个板发去打样出来就行了 楼主用的是哪个编译器? MagicYang 发表于 2017-6-4 20:57
楼主用的是哪个编译器?
没用PIC了,改用台产芯片了,便宜。
页:
[1]