一段PIC单片机的程序

一段PIC单片机的程序,第1张

BCD转化部分:

TEMPE<9 不用转化;

如果TEMPE>9,16进制通过加6转10进制,但要进位的,进位通过对下一个寄存器加1保存到下一个寄存器。如0FH 加6=15,5保存到当前寄存器,下一个寄存器加1。

BCD1:

MOVLW 06H

ADDWF TEMPE,1 ;加6

MOVLW 0FH

ANDWF TEMPE,1 ;高四位清零

INCF FSR,1 ;选下一寄存器,即高位寄存器

INCF INDF,1 ;高位寄存器加1,即进位

DECF FSR,1 ;恢复当前寄存器

RETURN

编译器:开发程序后,用编译器将之编译成可执行的二进制文件。是软件。

PIC单片机的C编译器只有HI-TECH公司出品PICC编译器,和CCS公司的CCS编译器。还有PIC的生产商Microchip公司自行生产的只针对PIC18/PIC24/dsPIC/PIC32系列单片机的C语言编译器MCC(MCC18 / MCC30 / MCC32)。如果是编译PIC10、PIC12、PIC16系列单片机,用CCS最好。而PIC18/PIC24/dsPIC/PIC32系列,用MCC最好。

编程器:又称之为烧录器,是把你生成的可执行文件download到单片机上的NAND或者NOR中的工具,是硬件。

1 static volatile unsigned TMR1 @ 0x0E;

0x0E 是寄存器地址。 表示这个TMR1是寄存器0x0E的值。 具体这个寄存器是做什么用的,需要看你芯片的datasheet,比如 16F874A 16F877A 这个都是计数寄存器的地址。

2 PopQueue应该是一个d出队列的函数。

将队列首d出到msg中,返回值为PopSuccess表示取数据成功,取到的数据会存在msg中。

一般用于中断传数据给主线程。这个在主线程中接收。

3 __CONFIG(x) 一般是配置寄存器的。

#include<reg51h>

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;

}

}

}

这个是我自己写的,单片机与计算机串口通信。计算机向单片机发送一个数据 然后单片机接受到后又把那个数据返回计算机。 欢迎提问……

很简单的。

在main主程序里面

LOOP GOTO LOOP

这条程序,会不停的执行,到了TMR0溢出的时候就会执行中断程序

ORG 0004H为中断程序的地址

这些的是什么啊 看的乱乱的

、中断时候跟while(1) 怎么看怎么别扭了

void main()

{

init(); 只执行一次????

TXREG=0x31;只执行一次????

while(!TRMT); 中断》》》》

while(1); 死循环 ???可它循环的是什么呢?? 要是这样 我觉得这个去掉也没问题 ---

后面为什么要加个while(1);? 这样 这个程序不就是个死循环了吗>

到while(1);那程序就死循环了

吧while(1);加在主函数的 一开始

while(1)

{

init();

TXREG=0x31;

while(!TRMT);

}

里面在也东西

这样实验一下 我也是刚入门 除了这个问题还是感觉有点什么问题呢 你先这么实验一下

还有 你用软件仿真实验一下 单步执行 看看停在在个程序那出问题了 就好找了

有条件就硬件仿真一下

记得采纳啊

函数_write_com和_delay_ms在中断和主程序中都有调用,会导致混合调用。

英文写的很明白了,会上网就不会查英文单词吗还是不知道什么是混合调用。

比如你主程序调用_delay_ms做100ms延时,正在做循环延时,结果一个中断进来,中断处理程序也调用了_delay_ms,结果就是_delay_ms原有的数据冲掉,从头再来,这次执行是对的。等中断处理完,再执行走到一半的_delay_ms程序,因为数据被冲掉了,天知道是什么结果。

用的是PIC的C语言吧?不好好看书,PIC的C语言最不灵光的(之一)就是程序的混合调用。资源不够啊!

其它单片机看编译器,有的也会报错,有的会很聪明(比如KEIL)的知道要保护原始数据,在中断里帮你保护了。

以上就是关于一段PIC单片机的程序全部的内容,包括:一段PIC单片机的程序、PIC编译器和编程器有什么区别编程序用哪一个、有几行PIC单片机的c语言程序代码看不懂,请教一下。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9488401.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存