pic系列单片机用c语言编程时,让他执行AD转换的指令是什么?

Python010

pic系列单片机用c语言编程时,让他执行AD转换的指令是什么?,第1张

在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

3楼的方法是用keil开发51单片机时候潜入汇编的

方法,对于pic单片机来说,不能这杨编译。因为KEIL不能编译pic单片机的C语言和汇编语言,必须用MPLAB+PICC或者MPLAB+

mc编译器

一般pic12、16系列的8位中低端单片机的编译器潜入汇编是用

_asm("

汇编单句语句

");

如果要输入一大段汇编语句,则用:

#asm

N条汇编语句

#endasm

#ifndef __PWM__H__

#define __PWM__H__

void pwm_ccp1(unsigned char a,unsigned char b)

void pwm_ccp2(unsigned char a,unsigned char b)

#endif

void pwm_ccp1(unsigned char a,unsigned char b)//左边PWM

//CCP1 模块的 PWM 工作方式,周期为(b+1)*4*Tosc*(TMR2前分频值)=b+1 us //pwm高电平=a:CCP1CON(第四五位)Tosc*(TMR2前分频值)

//pwm高电平=a:CCP1CON(第四五位)Tosc*(TMR2前分频值)

{//a>b时有最高转速

CCPR1L=a //* 设置工作循环的高 8bit 为 a

CCP1CON=0X0C //0000 1100 设置 CCP1 为 PWM 工作方式,且工作循环的低 bit2 为 11*/

CCP1IE=0//* 禁止总中断和外围中断 */

PR2=b //* 设置 PWM 周期 */

TRISC2=0 //* 设置 RC2/CCP1 为输出 */

T2CON=0X04 //* 0000 1000前分频比为 1:1 ,后分频器1:2,打开 TMR2 ,同时输出 PWM 信号 */

}

void pwm_ccp2(unsigned char a,unsigned char b) //右边PWM

//CCP2 模块的 PWM 工作方式,周期为(b+1)*4*Tosc*(TMR2前分频值),

//pwm高电平=a:CCP2CON(第四五位)Tosc*(TMR2前分频值)

{

CCPR2L=a //* 设置工作循环的高 8bit 为 a

CCP2CON=0X0C //* 设置 CCP2 为 PWM 工作方式,且工作循环的低 bit2 为 11*/

CCP2IE=0 //* 中断屏蔽

PR2=b //* 设置 PWM 周期 */

TRISC1=0 //* 设置 RC1/CCP2 为输出 */

T2CON=0X04 //* 前分频比为 1 ,打开 TMR2 ,同时输出 PWM 信号 */

}