ds证据编程
㈠ 单片机中的DS1302编程时,它的读、写底层函数是干什么用的,DS1302的初始化又是做什么的
#include "ds1302.h"
void delaynus(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++);
}
void Write1302(unsigned char dat)
{
unsigned char i;
SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备
delaynus(2); //稍微等待,使硬件做好准备
for(i=0;i<8;i++) //连续写8个二进制位数据
{ DATA=dat&0x01; //取出dat的第0位数据写入1302 低位在前,高位在后
delaynus(2); //稍微等待,使硬件做好准备
SCLK=1; //上升沿写入数据
delaynus(2); //稍微等待,使硬件做好准备
SCLK=0; //重新拉低SCLK,形成脉冲
dat>>=1; //将dat的各数据位右移1位,准备写入下一个数据位
} }
void WriteSet1302(unsigned char Cmd,unsigned char dat)
{
RST=0; //禁止数据传递
SCLK=0; //确保写数居前SCLK被拉低
RST=1; //启动数据传输
delaynus(2); //稍微等待,使硬件做好准备
Write1302(Cmd); //写入命令字
Write1302(dat); //写数据
SCLK=1; //将时钟电平置于高电平状态
RST=0; //禁止数据传递
}
unsigned char Read1302(void)
{
unsigned char i,dat;
delaynus(2); //稍微等待,使硬件做好准备
for(i=0;i<8;i++) //连续读8个二进制位数据
{ dat>>=1;
if(DATA==1) //如果读出的数据是1
dat|=0x80; //将1取出,写在dat的最高位
SCLK=1; //将SCLK置于高电平,为下降沿读出
delaynus(2); //稍微等待
SCLK=0; //拉低SCLK,形成脉冲下降沿
delaynus(2); //稍微等待
}
return dat; //将读出的数据返回
}
unsigned char ReadSet1302(unsigned char Cmd)
{
unsigned char dat;
RST=0; //拉低RST
SCLK=0; //确保写数居前SCLK被拉低
RST=1; //启动数据传输
Write1302(Cmd); //写入命令字
dat=Read1302(); //读出数据
SCLK=1; //将时钟电平置于已知状态
RST=0; //禁止数据传递
return dat; //将读出的数据返回
}
void Init_DS1302(void)
{
unsigned char flag;
flag= ReadSet1302(0x81);
if(flag&0x80) //判断时钟芯片是否关闭
{ WriteSet1302(0x8E,0x00); //根据写状态寄存器命令字,写入不保护指令
WriteSet1302(0x80,((55/10)<<4|(55%10))); //根据写秒寄存器命令字,写入秒的初始值
WriteSet1302(0x82,((59/10)<<4|(59%10))); //根据写分寄存器命令字,写入分的初始值
WriteSet1302(0x84,((23/10)<<4|(23%10))); //根据写小时寄存器命令字,写入小时的初始值
WriteSet1302(0x86,((18/10)<<4|(18%10))); //根据写日寄存器命令字,写入日的初始值
WriteSet1302(0x88,((6/10)<<4|(6%10))); //根据写月寄存器命令字,写入月的初始值
WriteSet1302(0x8c,((9/10)<<4|(9%10))); //根据写年寄存器命令字,写入年的初始值
WriteSet1302(0x90,0xa5); //打开充电功能 选择2K电阻充电方式
WriteSet1302(0x8E,0x80); //根据写状态寄存器命令字,写入保护指令
}
}
㈡ 汇编语言中 cs, ds,ss 的区别
一、寄存器位置不同:
1、CS:代码段寄存器;
2、DS:数据段寄存器;
3、SS:堆栈段寄存器。
二、存放位置不同:
1、代码段寄存器CS:存放当前正在运行的程序代码所在段的段基值。
2、数据段寄存器DS:存放数据段的段基值。
3、堆栈段寄存器SS:存放堆栈段的段基值。
三、段地址不同:
1、cs代码段地址,联合ip作为cpu指向当前正在执行的那条指令所使用,不能随意修改它。
2、ss堆栈度段地址问联合sp定义一个答堆栈,一旦你确定了堆栈地址,ss也不能随便改变了。
3、ds数据段地址定义一个数据段。
(2)ds证据编程扩展阅读:
汇编语言的特点是能被计算机直接识别和执行,使用它进行编程可以减少占用空间、提高运行速度,并能直接对硬件实施控制。
在需要实时控制的时候,有着不可替代的重要地位,但汇编语言在编程和理解时要复杂、困难一些,尤其是在进行数据处理或是逻辑运算时更加凸显出其劣势。
高级语言是面向使用者的语言,能更准确地被程序员所理解,它的表达能力强,功能多,编程效率高,上手速度快,自动化程度高,因而更受欢迎。
在大部分软件开发中,使用者都采用高级语言编程,以提高编程效率。但在要求存储空间小,执行速度快,需直接对硬件进行控制的场合,则应用汇编语言编程,以达到优化程序速度的目的。
网络-汇编语言 (面向机器的程序设计语言)
㈢ 微机编程题,详细如下,高分求解答!
;; 1.在M数据段从DATA单元开始分别存放了两个8位无符号数,
;; 试比较它们的大小,并将小者传送到MIN单元。
M SEGMENT
DATA DB 9FH, 0B6H
MIN DB ?
M ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:M
ORG 100H
START: MOV AX, M
MOV DS, AX
MOV AL, DS:[DATA]
MOV BL, DS:[DATA+1]
CMP AL, BL
JBE MIN_A
MOV MIN, BL
JMP FINISH
MIN_A: MOV MIN, AL
JMP FINISH
FINISH: INT 3 ;中止,以便在DEBUG中查看结果
CODE ENDS
END START
;;将asm源程序编译链接生成exe, 在Win7的DOS中用debug运行通过,
;;运行至INT 3程序中止,在debug中用 d DS:02 命令,
;;可查看到MIN单元的值为茄碰较小值9Fh
==========================================
;; 2.已知AL中有郑蚂一8位二进制数,测试其中的D2位,
;; 如果为1则转移到EXIT。
CODE SEGMENT
ASSUME CS:CODE
ORG 100H
START: MOV AL, 10110110b
TEST AL, 00000100b
JNZ EXIT
INT 3
EXIT: MOV AH, 4CH
INT 21H
CODE ENDS
END START
;;将asm源程序编译链接生成exe, 在Win7的DOS中用debug运喊纳埋行通过