导航:首页 > 编程语言 > 单片机ad汇编程序

单片机ad汇编程序

发布时间:2022-08-17 16:24:16

A. 想要一个80C51单片机控制ad9850的汇编程序,能用按键调节的·最好能加显示

我用过AD9850 是8根数据线,3根控制线(不是地址线),程序如下

#define AD9850 P1OUT //数据
#define W_CLK_H P6OUT|=BIT4 //时钟线
#define W_CLK_L P6OUT&=~BIT4
#define FQ_UP_H P6OUT|=BIT5
#define FQ_UP_L P6OUT&=~BIT5
#define RSET_H P6OUT|=BIT6 //复位线
#define RSET_L P6OUT&=~BIT6
long unsigned int f=1000,A9850temp=0;
uchar sendon=1;
uchar Mdata[5]=;

void Deal()
{
double pinlv;
uchar i;
pinlv=f;
pinlv*=107.3742; //系数要根据实际的外接晶振频率而定 本设计有源晶振40M
A9850temp=(long unsigned)pinlv;

Mdata[4]=A9850temp&0x000000ff;
Mdata[3]=(A9850temp>>8)&0x000000ff;
Mdata[2]=(A9850temp>>16)&0x000000ff;
Mdata[1]=(A9850temp>>24)&0x000000ff;
FQ_UP_L;
_NOP();
FQ_UP_H;
_NOP();
FQ_UP_L;
_NOP();
W_CLK_L;

for(i=0;i<5;i++)
{

AD9850=Mdata[i];
W_CLK_H;
delay(200);
W_CLK_L;

}
delay(200);
FQ_UP_H;

}

void AD9850Init()
{ W_CLK_L;
delay(200);
FQ_UP_L;
delay(200);
RSET_H;
delay(200);
RSET_L;
f=100000;
}

void AD9850fun()

}

B. 求AD转换单片机实验的汇编程序

接线:p3.6接srd
p3.7接swr
p3.0接pin
p3.1接clk
ad0809的clk接脉冲
cs接8000h的译码电路程序:ad0809 xdata 8000h
org 0000h
ajmp main
org 0030h
main:mov dptr,#8000h
mov a,#01h
movx @dptr,a
call delay
movx a,@dptr
mov r0,a
call disp
call delay
call delay
call delay
ajmp maindisp:mov a,r0
anl a,#00001111b
acall dsend
mov a,r0
swap a
anl a,#00001111b
acall dsend
ret
dsend:mov dptr,#tab
movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
ret delay:mov r4,#250
delay1:mov r5,#250
djnz r5,$
djnz r4,delay1
ret
tab:db 03h ;0
db 9fh ;1
db 25h ;2
db 0dh ;3
db 99h ;4
db 49h ;5
db 41h ;6
db 1fh ;7
db 01h ;8
db 09h ;9
db 11h ;灭
db 11h
db 0c1h
db 63h
db 85h
db 61h
db 71h
db 00h
end

C. 求51单片机AD程序

如下程序是在
STC
官方网站
提供的。应该很有用。
////
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
#include
"reg51.h"
#include
"intrins.h"
#define
FOSC
18432000L
#define
BAUD
9600
typedef
unsigned
char
BYTE;
typedef
unsigned
int
WORD;
#define
URMD
0
//0:使用定时器2作为波特率发生器
//1:使用定时器1的模式0(16位自动重载模式)作为波特率发生器
//2:使用定时器1的模式2(8位自动重载模式)作为波特率发生器
sfr
T2H
=
0xd6;
//定时器2高8位
sfr
T2L
=
0xd7;
//定时器2低8位
sfr
AUXR
=
0x8e;
//辅助寄存器
sfr
ADC_CONTR
=
0xBC;
//ADC控制寄存器
sfr
ADC_RES
=
0xBD;
//ADC高8位结果
sfr
ADC_LOW2
=
0xBE;
//ADC低2位结果
sfr
P1ASF
=
0x9D;
//P1口第2功能控制寄存器
#define
ADC_POWER
0x80
//ADC电源控制位
#define
ADC_FLAG
0x10
//ADC完成标志
#define
ADC_START
0x08
//ADC起始控制位
#define
ADC_SPEEDLL
0x00
//540个时钟
#define
ADC_SPEEDL
0x20
//360个时钟
#define
ADC_SPEEDH
0x40
//180个时钟
#define
ADC_SPEEDHH
0x60
//90个时钟
void
InitUart();
void
InitADC();
void
SendData(BYTE
dat);
BYTE
GetADCResult(BYTE
ch);
void
Delay(WORD
n);
void
ShowResult(BYTE
ch);
void
main()
{
InitUart();
//初始化串口
InitADC();
//初始化ADC
while
(1)
{
ShowResult(0);
//显示通道0
ShowResult(1);
//显示通道1
ShowResult(2);
//显示通道2
ShowResult(3);
//显示通道3
ShowResult(4);
//显示通道4
ShowResult(5);
//显示通道5
ShowResult(6);
//显示通道6
ShowResult(7);
//显示通道7
}
}
/*----------------------------
发送ADC结果到PC
----------------------------*/
void
ShowResult(BYTE
ch)
{
SendData(ch);
//显示通道号
SendData(GetADCResult(ch));
//显示ADC高8位结果
//
SendData(ADC_LOW2);
//显示低2位结果
}
/*----------------------------
读取ADC结果
----------------------------*/
BYTE
GetADCResult(BYTE
ch)
{
ADC_CONTR
=
ADC_POWER
|
ADC_SPEEDLL
|
ch
|
ADC_START;
_nop_();
//等待4个NOP
_nop_();
_nop_();
_nop_();
while
(!(ADC_CONTR
&
ADC_FLAG));//等待ADC转换完成
ADC_CONTR
&=
~ADC_FLAG;
//Close
ADC
return
ADC_RES;
//返回ADC结果
}
/*----------------------------
初始化串口
----------------------------*/
void
InitUart()
{
SCON
=
0x5a;
//设置串口为8位可变波特率
#if
URMD
==
0
T2L
=
0xd8;
//设置波特率重装值
T2H
=
0xff;
//115200
bps(65536-18432000/4/115200)
AUXR
=
0x14;
//T2为1T模式,
并启动定时器2
AUXR
|=
0x01;
//选择定时器2为串口1的波特率发生器
#elif
URMD
==
1
AUXR
=
0x40;
//定时器1为1T模式
TMOD
=
0x00;
//定时器1为模式0(16位自动重载)
TL1
=
0xd8;
//设置波特率重装值
TH1
=
0xff;
//115200
bps(65536-18432000/4/115200)
TR1
=
1;
//定时器1开始启动
#else
TMOD
=
0x20;
//设置定时器1为8位自动重装载模式
AUXR
=
0x40;
//定时器1为1T模式
TH1
=
TL1
=
0xfb;
//115200
bps(256
-
18432000/32/115200)
TR1
=
1;
#endif
}
/*----------------------------
初始化ADC
----------------------------*/
void
InitADC()
{
P1ASF
=
0xff;
//设置P1口为AD口
ADC_RES
=
0;
//清除结果寄存器
ADC_CONTR
=
ADC_POWER
|
ADC_SPEEDLL;
Delay(2);
//ADC上电并延时
}
/*----------------------------
发送串口数据
----------------------------*/
void
SendData(BYTE
dat)
{
while
(!TI);
//等待前一个数据发送完成
TI
=
0;
//清除发送标志
SBUF
=
dat;
//发送当前数据
}
/*----------------------------
软件延时
----------------------------*/
void
Delay(WORD
n)
{
WORD
x;
while
(n--)
{
x
=
5000;
while
(x--);
}
}

D. 请给一个STC12C5A08AD单片机AD转换的汇编程序

LED_MCU_START EQU P3.7

ADC_CONTR EQU 0BCH ;A/D转换寄存器
ADC_RES EQU 0BDH ;8位A/D转换结果寄存器
P1ASF EQU 9DH ;P1口中的相应位作为模拟功能使用时的控制寄存器,如做A/D用,相应位要置1

ADC_Power_On_Speed_Channel_0 EQU 11100000B ;P1.0作为A/D输入
ADC_Power_On_Speed_Channel_1 EQU 11100001B ;P1.1作为A/D输入
ADC_Power_On_Speed_Channel_2 EQU 11100010B ;P1.2作为A/D输入
ADC_Power_On_Speed_Channel_3 EQU 11100011B ;P1.3作为A/D输入
ADC_Power_On_Speed_Channel_4 EQU 11100100B ;P1.4作为A/D输入
ADC_Power_On_Speed_Channel_5 EQU 11100101B ;P1.5作为A/D输入
ADC_Power_On_Speed_Channel_6 EQU 11100110B ;P1.6作为A/D输入
ADC_Power_On_Speed_Channel_7 EQU 11100111B ;P1.7作为A/D输入
;-------------------------------------------------
;定义变量
ADC_Channel_0_Result EQU 30H ;0通道A/D转换结果
ADC_Channel_1_Result EQU 31H ;1通道A/D转换结果
ADC_Channel_2_Result EQU 32H ;2通道A/D转换结果
ADC_Channel_3_Result EQU 33H ;3通道A/D转换结果
ADC_Channel_4_Result EQU 34H ;4通道A/D转换结果
ADC_Channel_5_Result EQU 35H ;5通道A/D转换结果
ADC_Channel_6_Result EQU 36H ;6通道A/D转换结果
ADC_Channel_7_Result EQU 37H ;7通道A/D转换结果
;--------------------------------------------------
ORG 0000H
LJMP MAIN

ORG 0050H
MAIN:
CLR LED_MCU_START ;MCU工作指示灯 LED_MCU_START EQU P3.7
MOV SP, #7FH ;设置堆栈

ACALL Initiate_RS232 ;初始化串口

ACALL ADC_Power_On ;开ADC电源, 第一次使用时要打开内部模拟电源
;开ADC电源, 可适当加延时,1mS以内就足够了
ACALL Set_P12_ASF ;设置 P1.2 为模拟功能口
ACALL Set_ADC_Channel_2 ;设置 P1.2 作为A/D转换通道

ACALL Get_AD_Result ;测量电压并且取A/D转换结果
ACALL Send_AD_Result ;发送转换结果到 PC 机

ACALL Set_P12_Normal_IO ;设置 P1.2 为普通IO
MOV A, ADC_Channel_2_Result ;用 P1 口显示A/D转换结果
CPL A
MOV P1, A

Wait_Loop:
SJMP Wait_Loop ;停机

;-------------------------------------------------------------
;-------------------------------------------------------------
;-------------------------------------------------------------
;-------------------------------------------------------------
Initiate_RS232: ;串口初始化
CLR ES ;禁止串口中断
MOV TMOD, #20H ;设置 T1 为波特率发生器
MOV SCON, #50H ;0101,0000 8位数据位, 无奇偶校验
MOV TH1, #0FBH ;18.432MHz 晶振, 波特率 = 9600
MOV TL1, #0FBH

SETB TR1 ;启动 T1
RET
;--------------------------------------------------------------
Send_Byte:
CLR TI
MOV SBUF, A
Send_Byte_Wait_Finish:
JNB TI, Send_Byte_Wait_Finish
CLR TI
RET
;--------------------------------------------------------------
ADC_Power_On:
PUSH ACC
ORL ADC_CONTR, #80H ;开A/D转换电源
MOV A, #20H
ACALL Delay ;开A/D转换电源后要加延时,1mS以内就足够了
POP ACC
RET

;-------------------------------------------------------------
;设置P1.2为模拟功能
Set_P12_ASF:
PUSH ACC
MOV A, #00000100B
ORL P1ASF, A
POP ACC
RET

;-------------------------------------------------------------
;设置 P1.2 为普通IO
Set_P12_Normal_IO:
PUSH ACC
MOV A, #11111011B
ANL P1ASF, A
POP ACC
RET

;-------------------------------------------------------------
Set_ADC_Channel_2:
MOV ADC_CONTR, #ADC_Power_On_Speed_Channel_2
;选择P1.2作为A/D转换通道
MOV A, #05H ;更换 A/D 转换通道后要适当延时, 使输入电压稳定
;以后如果不更换 A/D 转换通道的话, 不需要加延时
ACALL Delay ;切换 A/D 转换通道,加延时20uS~200uS就可以了,与输入电压源的内阻有关
;如果输入电压信号源的内阻在10K以下,可不加延时
RET

;-------------------------------------------------------------

Send_AD_Result:
PUSH ACC
MOV A, ADC_Channel_2_Result ;取 AD 转换结果
ACALL Send_Byte ;发送转换结果到 PC 机
POP ACC
RET

;----------------------------------------------------------
Get_AD_Result:
PUSH ACC ;入栈保护
MOV ADC_RES, #0
ORL ADC_CONTR, #00001000B ;启动 AD 转换
NOP ;在对ADC_CONTR寄存器进行写操作后,要加4个空操作延时,才能够正确读到ADC_CONTR的值
NOP ;在对ADC_CONTR寄存器进行写操作后,要加4个空操作延时,才能够正确读到ADC_CONTR的值
NOP ;在对ADC_CONTR寄存器进行写操作后,要加4个空操作延时,才能够正确读到ADC_CONTR的值
NOP ;在对ADC_CONTR寄存器进行写操作后,要加4个空操作延时,才能够正确读到ADC_CONTR的值
Wait_AD_Finishe:
MOV A, #00010000B ;判断 AD 转换是否完成
ANL A, ADC_CONTR
JZ Wait_AD_Finishe ;AD 转换尚未完成, 继续等待

ANL ADC_CONTR, #11100111B ;清0 ADC_FLAG, ADC_START 位, 停止A/D转换

MOV A, ADC_RES
MOV ADC_Channel_2_Result, A ;保存 AD 转换结果
POP ACC
RET
;---------------------------------------------------------------
Delay:
PUSH 02 ;将寄存器组0 的 R2 入栈
PUSH 03 ;将寄存器组0 的 R3 入栈
PUSH 04 ;将寄存器组0 的 R4 入栈
MOV R4, A
Delay_Loop0:
MOV R3, #200 ;2 CLOCK ---------------------+
Delay_Loop1: ; |
MOV R2, #249 ;2 CLOCK ------+ |
Delay_Loop: ; | 1002 CLOCK |200406 CLOCK
DJNZ R2, Delay_Loop ;4 CLOCK | |
DJNZ R3, Delay_Loop1 ;4 CLOCK ------+ |
DJNZ R4, Delay_Loop0 ;4 CLOCK ---------------------+

POP 04
POP 03
POP 02
RET
;----------------------------------------------------------------
END

E. 关于10位AD转换的汇编程序—12C5410AD单片机

用十位的二进制,除以10,余数就是个位;
商,继续除以10,余数就是十位;
依次类推,可得出百位、千位。

十位的二进制,除以10,可以使用二字节除以一字节的除法子程序,这个子程序可见我前几天写出的答案:
http://..com/question/130203351.html
---------------------
一个高8位和一个低2位(******xx)这两者如何结合?
呵呵,这应该另外提出一个新问题。

F. 单片机AD转换,汇编语言,求助大佬!!!

汇编来做这个题,花费时间很长的,没人愿意白白浪费好几个小时来做。

阅读全文

与单片机ad汇编程序相关的资料

热点内容
随车拍app绑定什么设备 浏览:893
方维团购系统源码 浏览:988
linux反弹shell 浏览:152
打印机接口加密狗还能用吗 浏览:299
二板股票源码 浏览:446
度人经pdf 浏览:902
怎么配置android远程服务器地址 浏览:960
java程序员看哪些书 浏览:943
什么app可以免费和外国人聊天 浏览:796
pdf手写笔 浏览:182
别永远伤在童年pdf 浏览:990
爱上北斗星男友在哪个app上看 浏览:421
主力散户派发源码 浏览:671
linux如何修复服务器时间 浏览:61
荣县优途网约车app叫什么 浏览:479
百姓网app截图是什么意思 浏览:229
php如何嵌入html 浏览:817
解压专家怎么传输 浏览:745
如何共享服务器的网络连接 浏览:136
程序员简易表白代码 浏览:170