//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
你的:SBUF = P1 //读数据并发送
问题稍稍复杂了一点,分解一下,改为:
P2 = P1//读数据当场显示,观察数据是否正确
SBUF = 100 //发送一个自定义的数据,观察对方接收的情况
delayms(200)//多延时一会,等待发送完毕
试试看,找出毛病出在何处。
芯片采样回来后,是一个AD值。需要转换成想要的一些内容的话,要做表格。如温度转换。首先要制作一个温度对应的AD表格。多大的值是多少度。
查表可以采用顺序法进行。
从表格的第一个开始查起,比第一个大时,再比较第二个,依次类推。每比较一次,将计数器累加一次。
比上一个大,比下一个小时,就是上一个温度点,此时,把计数器的值拿出来就是对应的温度值。
图要看芯片资料连接了,应该很简单的。