单片机编程题。麻烦在每句程序后写一点注释哈!

设单片机时钟为12MHZ,使用定时器1以方式1产生周期为10ms的定时中断,每发生一次定时中断利用ADC0809的通道0进行一次AD采样,结果存入U1芯片,存满后从头开始循环存储,试编程实现

第1个回答  2013-08-31
其实这个只要知道ADC0809的控制方式就可以周期性猜电压值了,还有存入U1,是存入EEPROM器件还是什么,如果是IIC存储芯片可能还要用IIC总线协议哦,51单片机没有这个协议,不过可以模拟。我这里有文件可以参考,不知道是否适合你,欢迎随时来咨询。
第2个回答  2013-08-31
把电路图贴出来,尤其是U1是个什么芯片,我给你解答追问

图片是抓拍的,所以非常模糊,但是U1是外扩数据存储器,电路图满足ADC0809的选通地址为0FF8H~DFFFH,DAC0832片选地址为9FFFH。这些条件

够用么?先谢谢你了,真的很感谢

追答

图纸看不清,拍的太模糊了,估计程序如下:
xdata unsigned char adbuff[128]; //数据缓冲区,位于U1;
unsigned·char adptr; //缓冲区索引,
xdata unsigned·char advalue _at_0x0ff8; //AD0809读数据地址,猜测
xdata unsigned·char adchanl _at_0x1ff8; //AD0809写通道地址,猜测
sbit adstart=P1^0;
//延时子程序,延时n*100uS ,大致数 ,不是很准确的延时
void delay(unsigned char n)
{
unsigned char i;
while(n--)
{
i=90;
while(i--);
}
}
//初始化程序,初始化指针,定时器
void init()
{
adptr=0;
adstart=1;
TMOD=0x21; /*每10mS产生定时0中断,时钟12MHZ*/
TH0=55536/256; //每秒100000个脉冲,10ms需要10000个脉冲
TL0=55536%256;
TR0=1;
IE=0x82; //7 EA 中断使能位: 5 定时器2中断使能。 4 ES 串口中断使能。
//3 定时器1溢出中断使能。2 EX1 外部中断1使能。 1 ET0 定时器0溢出中断使能。 0
//EX0 外部中断0使能。
//下来先启动一次AD转换,一般使用P1的一个引脚作为启动引脚比较好,图纸看不清,只好猜、
//假设p1.0为通道启动
adchanl=0; //选择0通道

adstart=1;
delay(2); //延时200uS
adstart=0;
}
//主程序在下,百度嫌我字数多,你得追问一次,我才能继续给你贴程序

追问

再追问就没有财富值了。。。。

追答

没关系,赠人玫瑰手有余香:
main()
{
init();
while(1)
{
//加入要干的其他事情
}
}
//定时器中断程序
void timer0() interrupt 1
{
TH0=55536/256; //重置定时器
TL0=55536%256;
adbuff[adptr]=advalue ; //读取AD值,放入数据缓冲区,位于U1;
adptr++;
adstart=1;
if(adptr>127)
adptr=0;
adstart=0;
}
因图纸不清,并不见得都对,但基本编程思想如上,若图纸能清楚些,可再帮你修改程序。

第3个回答  2013-08-31
米有附件。打字很辛苦的15分怎么糊口。。追问

对不起我只剩15分了你可怜可怜我吧~~~~~~

追答

这个。。。刚没仔细看题目。这个题目太复杂。要查阅资料才能保证没有错误。如果是试题的话这只是个形式而已不用太认真。用笔来写程序不出错的概率是。。至少我从没成功过。目测用c语言写这个程序完整可能要将近100行。。短期不可能完成的。
main()
{
初始化,设定T1“第一模式”←就这个都很不负责。啥叫第一模式啊。16位还是8位直说不能够啊。
。。。
设T1中断
开中断
while(1);//等待,啥也不干
}
void ad()
{
时序不知道,自己找
}
void initrrupt1 t1_sev()
{//t1中断服务
ad();//造个全局变量ad,结果存那里
存储的逻辑。。。这个自己找datasheet。
因为要循环存储要保存当前存储位置地址,加个全局变量add_now
if(add_now>存储器最大地址)
{
add_now=0;//从0开始,假设。循环可能造成逻辑丢失。
}
}
框架就是这样,然后自己赶紧脑补

本回答被提问者采纳

单片机汇编语言,求给这个很短程序写一下注释
START: CLR 00H ;将00H但愿的内容清零 MOV R7,#04H ;将立即数04H送给寄存器R7 MOV R0,#20H ;将将立即数20H送给寄存器R0 LOOP: MOV A,@R0 ;将20H单元的内容送给计数器ACC MOV 2BH,A ;将累加器ACC内的数放到2BH单元 INC R0 ;计数器R0+1 MOV ...

单片机程序注释
1 这是一个一位的7段数码管显示控制程序,通过P3口连接了一个7段数码管(静态显示,共阳极)。2 该程序就是利用这个一位的7段数码管分时循环显示0~9、A~F共16个十六进制数码。3 在程序存储器存放的表格TAB: 是共阳极显示编码 应该是0~9、A~F共16个显示编码 可惜少了一半:现在给你...

51单片机C语言程序注释标注(写全)
break;\/\/P2低三位为03H,数码管显示“F”}}}

单片机定时器占空比问题,麻烦来个程序,再注释一下
如果想得到占空比=33%,那么取输出信号周期\/定时器周期=100,即定时器周期取 T=0.1mS=100uS

跪求,单片机程序注释
READ:MOV A,P1 将单片机的P1端口读到累加器当中去 CJNE A,30H,SAVE 比较累加器与30H缓冲是否相等,不相等则跳转到SAVE,如果相等,则执行下一句。JMP READ 跳转到READ段 SAVE:MOV 30H,A 将累加器A的数据存入30H缓冲当中去 MOV SBUF,A 将累加器A的数据送入UART串口缓存SBUF内发...

麻烦高手详细注释每句程序
麻烦高手详细注释每句程序 10 程序1:sfrP1=0x90;sfrP3=0xB0;voidmain(void){unsignedcharpval;P1=0xFF;while(1){pval=P1;P3=pval;}}程序2:\/*---定义P1(8bits),P1.0,P1.1---... 程序1:sfr P1=0x90;sfr P3=0xB0;void main(void) { unsigned char pval; P1=0xFF; while(1) { pval=P1;...

单片机定时器占空比问题,麻烦写个程序!程序!程序!加注释最好了
void t0isr() interrupt 1{cnt++;cnt%=40;if(cnt<(pwm*4))pluse=1;else pluse=0;}void uart() interrupt 4{if(RI) { RI=0; pwm=SBUF; if(pwm>10)pwm=10; }}main(){TMOD=0x22;SCON=0x50;TH0=6;TL0=6;TR0=1;ET0=1;ES=1;TR1=1;EA=1;} ...

单片机程序做批注,谢谢
write_com();应该是写入命令 0x80 0x90 0x88 0x98 对应的是命令值 这个芯片文档里找 write_dat();应该是写数据 写入的数据是tab1[16] tab2[16] tab3[16] tab4[16] 这四个数组里的数据,每个数组里有16个字节的数据,write_dat每次写入1个字节,循环16次写入完1个数组 delay(1...

单片机声音报警器C语言程序, 望高人给每段注释.谢谢!
while(1);\/\/程序在这里中止,等待定时器0中断 } void t0(void) interrupt 1 using 0\/\/定时器0中断程序 { TH0=(65536-250)\/256;\/\/定时器0赋初值 TL0=(65536-250)%256;\/\/定时器0赋初值 t02s++;\/\/t02s自加1 if(t02s==800)\/\/如果t02s增加到了800 { t02s=0;\/\/t02s清零 flag=~flag...

单片机程序注释
DELAY2:DJNZR6,DELAY2 \/\/R6中的数减1后如不为跳转到DELAY2处,本例中即继续执行这句,直到R6中内容为0.DJNZR7,DELAY1 \/\/R7中的内容减一,不为零则跳转到DELAY1处 RET\/\/延时子函数返回 END \/\/程序结束 语言表达不好,解释的难免有点不周到,希望能够帮助LZ。LZ加油!

相似回答
大家正在搜