打印
[AVR单片机]

传感器数据采集系统

[复制链接]
2102|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
Karlshen|  楼主 | 2009-11-3 16:24 | 只看该作者
;======================
; 设置波特率
;======================
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP ADZD
MAIN:
MOV TMOD,#20H           ;令定时器1工作于模式2
MOV TH1,#0FDH
MOV TL1,#0FDH            ;设定计数值,令波特率为9600
SETB TR1                      ;启动定时器1
SETB   IT0                     ;为边沿触发方式
SETB EA                        ;开中断
SETB EX0                      ;允许中断
;======================
; 接收数据
;======================
MOV SCON,#70H             ;设定串行端口为模式1
LOOP:   CLR RI                 ;清除接收中断标志位(开始接收数据)
JNB RI,$                          ;等待数据接收完毕

;======================
; 判断哪个按钮被按下
;======================
MOV A,SBUF                                ;接收到的数据(即代码)存入A内

NEXT1: CJNE A,#'1',NEXT0            ;若代码为1(即“开始”按钮被按下)
AJMP ADZH                                  ;则调用AD转换模块

NEXT0:  CJNE A,#'0',DONT            ;若代码为0(即“复位”按钮被按下)
AJMP ALLOFF                                ;则跳去执行ALLOFF

DONT: AJMP LOOP                          ;重复执行程序

;====================================================
; 执行相应的程序
;====================================================

;AD转换模块
ADZH:
MOV R0,#30H                ;存数据首地址
SETB P3.7                     ;经与非门后使R/C=0
CLR P3.6                       ;经与非门后使CE=1
MOV DPTR,#3FFFH            ;使AO=0,CS=0,启动12位转换
MOVX @DPTR,A              ;启动AD转换
HERE: AJMP HERE             ;等待中断
ADZD:
PUSH PSW
PUSH DPH
PUSH DPL
PUSH ACC                        ;保护现场
CLR P3.7                          ;经与非门后使R/C=1
MOV DPTR,#3FFFH            ;允许高8位并行输出(CS=0,R/C=1,AO=0)
MOVX A,@DPTR                ;读高8位
MOV @R0,A                      ;高8位存入RAM单元
MOV DPTR,#7FFFH            ;允许低4位加上4个0输出(CS=0,R/C=1,AO=1)
MOVX A,@DPTR                ;读低4位
ANL A,#0FH                      ;屏蔽高4位随机数据
INC R0                               ;数据地址加1
MOV @R0,A                       ;存低4位
POP ACC                           ;恢复现场
POP DPL
POP DPH
POP PSW
RETI
AJMP SENDON

;复位按钮的相应程序
ALLOFF: MOV     P0,#00H         ;数据清零
        AJMP    SENDALL             ;发送代码1

;====================================================
; 发送数据
;====================================================
;发送代码0
SENDALL:
CLR TI                        ;清除发送中断标志位(准备发送数据)
MOV SBUF,#'0'            ;发送代码2
JNB TI,$                      ;等待数据发送完毕
AJMP LOOP                  ;重复执行程序

;发送代码1
SENDON:
CLR TI
MOV SBUF,#'1'
JNB TI,$
AJMP LOOP

        END

使用特权

评论回复
板凳
lovelyegle| | 2009-11-3 16:29 | 只看该作者
楼主Great!

使用特权

评论回复
地板
god_like| | 2009-11-5 12:24 | 只看该作者
LZ很厉害啊

使用特权

评论回复
5
god_like| | 2009-11-5 12:24 | 只看该作者
学习了

使用特权

评论回复
6
Karlshen|  楼主 | 2009-11-21 22:48 | 只看该作者
:L,谢了,看来熟悉的人不多啊

使用特权

评论回复
7
jiabin1024| | 2009-11-23 08:58 | 只看该作者
支持一下,顶

使用特权

评论回复
8
ajingge| | 2009-12-16 19:18 | 只看该作者
传感器的信号直接接的ad574??

使用特权

评论回复
9
永闯| | 2009-12-23 22:34 | 只看该作者
学习一下,不错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

81

主题

734

帖子

1

粉丝