1. 有几行PIC单片机的c语言程序代码看不懂,请教一下。
1 static volatile unsigned TMR1 @ 0x0E;
0x0E 是寄存器地址。 表示这个TMR1是寄存器0x0E的值。 具体这个寄存器是做什么用的,需要看你芯片的datasheet,比如 16F874A 16F877A 这个都是计数寄存器的地址。
2 PopQueue应该是一个弹出队列的函数。
将队列首弹出到msg中,返回值为PopSuccess表示取数据成功,取到的数据会存在msg中。
一般用于中断传数据给主线程。这个在主线程中接收。
3 __CONFIG(x) 一般是配置寄存器的。
2. PIC单片机C语言
是左移,>>表示右移动
相当于 HC595_DATA_HIGH PORTC |0x01;
如果是HC595_DATA_HIGH PORTC |=(1<<2),1左移2位,那就是0000 0100
相当于 HC595_DATA_HIGH PORTC |0x04;
就是把 HC595_DATA_HIGH PORTC这个数的2位(0,1,2----第三位与1进行或运算)
注意:这里指的是位运算,上面的0x01,0x04在 或运算的时候可以这么写,因为其他位都是0,没有关系
3. pic系列单片机用c语言编程时,让他执行A/D转换的指令是什么
在C语言里没有指令,只有语句,用C语言执行A/D转换如下:
//A/D转换初始化子程序
void
adinitial()
{
ADCON0=0x41;
//选择A/D通道为RA0,且打开A/D转换器
//在工作状态,使A/D转换时钟为8Tosc
ADCON1=0X8E;
//转换结果右移,及ADRESH寄存器的高6位为"0"
//把RA0口设置为模拟量输入方式
ADIE=1;
//A/D转换中断允许
PEIE=1;
//外围中断允许
TRISA0=1;
//设置RA0为输入方式
}
//读ADRESH寄存器就能得到AD转换值了,
汇编的如下:
ADINT
MOVLW
0X51
MOVWF
ADCON0
;选择A/D转换通道为RA2,且打开A/D在工
;作状态,并使A/D转换时钟为8tosc
BANKSEL
ADCON1
;选BANK1体
MOVLW
0X80
MOVWF
ADCON1
;转换结果右移,即ADRESH寄存器的高6位;为“0”,且把RA2口设置成模拟量输入口
CLRF
PIE1
;禁止其它中断
BSF
PIE1,ADIE
;A/D转化中断允许
BSF
TRISA,2
;设置RA2口为输入方式
BSF
INTCON,PEIE
;外围中断允许
BSF
INTCON,GIE
;总中断允许
BCF
STATUS,RP0
;返回BANK0
RETURN
4. PIC 单片机 C编译语言的端口位操作语法
在PIC16中,你直接用
RC0=1;
或
RC0=0;
来对位操作
对于C18,你可以自己定义:
#define
_RC0
PORTCbits.RC0
这样你就可以象PIC16那样用了,只是前面要加个"_"
_RC0=1;
_RC0=0;
它们的原始定义参见相应芯片的h文件。
5. PIC单片机c语言中如何嵌套汇编
3楼的方法是用keil开发51单片机时候潜入汇编的
方法,对于pic单片机来说,不能这杨编译。因为KEIL不能编译pic单片机的C语言和汇编语言,必须用MPLAB+PICC或者MPLAB+
mc编译器
。
一般pic12、16系列的8位中低端单片机的编译器潜入汇编是用
_asm("
汇编单句语句
");
如果要输入一大段汇编语句,则用:
#asm
N条汇编语句
#endasm
6. PIC单片机 c语言编程
以DIP-40的PIC16F877A来举例 灯闪动频率为1秒
void Delay_Ms(unsigned char n);
void main(void)
{
while(1)
{
RA0 = 1;//2脚输出
//11脚是供电
RD2 = 1;//21脚输出
trisA = 0x04; //4脚RA2作为输入
if(RA2 == 0) //如果4脚为低电平
{
//执行代码
}
else //如果4脚为高电平
{
//执行代码
}
Delay_Ms(1000); //延时1秒
RA0 = 0;//2脚输出
//11脚是供电
RD2 = 0;//21脚输出
Delay_Ms(1000); //延时1秒
}
}
void Delay_Ms(unsigned char n) //延时程序
{
unsigned int i;
unsigned char j;
for(j=0;j<n;j++)
{
for(i=0;i<Fosc/44000;i++)
{
}
}
}
7. 一般8位PIC单片机使用C语言还是汇编语言编程,好像编译器不是支持所有类型的单片机
一般是简单的程序用汇编,复杂的程序用C,
PIC编译器分PICC ,C18,C30
PICC 10F,12F,16F PICC 也有18F
c18 18f
c30 30f 24f 33f
根据个人情况选择。
8. PIC单片机c语言中如何喂狗
首先你要说明你用的是哪款PIC的单片机和用哪个C编译器。
PIC有中低端的八位单片机PIC10/12/16的,高端的八位单片机PIC18系列,1十六位单片机PIC24和dsPIC,还有一个PIC32是三十二位的。上述的都可以通过调用宏指令CLRWDT();来实现喂狗。
但他们的宏指令的声明一般都是在各自的头文件中,比如根据他们的数据手册PIC10/12/16系列的宏指令声明都在htc.h文件中,pic.h里我还没试过。
而PIC18我用过的是MPLAB C18编译器,其声明宏指令的头文件是这个芯片的名称,如PIC18F4680.h。
而PIC24我用的是MPLAB C30编译器我是直接根据数据手册的要求在C文件里定义宏的:
#define ClrWdt() {__asm__ volatile ("clrwdt");}
而前面的八位单片机的C语言也可以用下列嵌入汇编的方法: asm("CLRWDT");
9. PIC单片机串口C程序
#include<reg51.h>
unsigned char a,flag;
unsigned int i;
void init_serial();
void init_serial() //初始化串口
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void serial() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
void main()
{
init_serial();
i=100;
flag=0;
while(1)
{
if(flag==1) //接受串口信息
{
ES=0;
P0=0x00;
while(i--);
P0=0xff;
SBUF=a;
flag=0;
while(!TI);
TI=0;
i=100;
ES=1;
}
}
}
这个是我自己写的,单片机与计算机串口通信。计算机向单片机发送一个数据 然后单片机接受到后又把那个数据返回计算机。 欢迎提问……
10. pic单片机可以用c编程吗用什么编译软件他是属于51系列的吗
PIC单片机可以用C,
编译环境(也就是编程软件)为MPLAB,他不属于51系列.