//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
是左移,>>表示右移动相当于 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,没有关系