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運喊納埋行通過