想編寫一個軟體,能把微控制器讀到的資料傳到軟體上,軟體也能改引數 匿名使用者 1級 2014-07-25 回答

網上搜微控制器上位機,上位機能透過串列埠給單片機發資料,微控制器收到資料就進行處理,這一流程可以達到控制作用。編上位機可以用MFC就行,開發平臺可是選vs2010或vc6。0

想編寫一個軟體,能把微控制器讀到的資料傳到軟體上,軟體也能改引數 大老爺 1級 2014-07-25 回答

sclk bit p1。0 ;ds1302時鐘口p1。0

io bit p1。1 ;ds1302資料口p1。1

rst bit p1。2 ;ds1302片選口p1。2

now data 40h

org 0

jmp reset

org 100h

reset:

call ds1302_initial ;初始化ds1302

mov dptr,#init

call ds1302_settime ;設定初始時間

mov r0,#now

call ds1302_gettime ;讀取當前時間

jmp $

init: //秒 分 時 日 月 星期 年

db 00h,00h,20h,01h,01h,05h,10h

;**************************************

;延時x微秒(stc90c52rc@12m)

;不同的工作環境,需要調整此函式

;入口引數:r7

;出口引數:無

;**************************************

delay: ;6 此延時函式是使用1t的指令週期進行計算,與傳統的12t的mcu不同

nop ;1

nop ;1

ret ;4

;**************************************

;從ds1302讀1位元組資料

;入口引數:無

;出口引數:acc

;**************************************

ds1302_readbyte:

clr a

push 0

mov 0,#8 ;8位計數器

readnext:

clr sclk ;時鐘線拉低

nop ;延時等待

nop

mov c,io ;讀取資料

rrc a ;儲存資料

setb sclk ;時鐘線拉高

nop ;延時等待

nop

djnz 0,readnext

pop 0

ret

;**************************************

;向ds1302寫1位元組資料

;入口引數:acc

;出口引數:無

;**************************************

ds1302_writebyte:

push 0

mov 0,#8 ;8位計數器

writenext:

clr sclk ;時鐘線拉低

nop ;延時等待

nop

rrc a ;移出資料

mov io,c ;送出到埠

setb sclk ;時鐘線拉高

nop ;延時等待

nop

djnz 0,writenext

pop 0

ret

;**************************************

;讀ds1302某地址的的資料

;入口引數:acc (地址)

;出口引數:acc (讀出的資料)

;**************************************

ds1302_readdata:

clr rst ;拉低片選

nop ;延時等待

nop

clr sclk ;時鐘線拉低

nop ;延時等待

nop

setb rst ;使能片選

nop ;延時等待

nop

call ds1302_writebyte ;寫地址

call ds1302_readbyte ;讀資料

ret

;**************************************

;往ds1302的某個地址寫入資料

;入口引數:acc (地址) b(需寫入的資料)

;出口引數:無

;**************************************

ds1302_writedata:

clr rst ;拉低片選

nop ;延時等待

nop

clr sclk ;時鐘線拉低

nop ;延時等待

nop

setb rst ;使能片選

nop ;延時等待

nop

call ds1302_writebyte ;寫地址

mov a,b ;地址資料送入acc

call ds1302_writebyte ;寫資料

ret

;**************************************

;寫入初始時間

;入口引數:dptr (初始值地址)

;出口引數:無

;**************************************

ds1302_settime:

mov a,#8eh

mov b,#0

call ds1302_writedata ;允許寫操作

mov r7,#80h ;從暫存器80開始

mov r6,#7 ;連續寫7次

setnext:

clr a

movc a,@a+dptr

mov b,a ;資料

mov a,r7 ;地址

call ds1302_writedata ;寫資料

inc r7

inc r7 ;暫存器地址+2

inc dptr ;資料地址+1

djnz r6,setnext

mov a,#8eh

mov b,#80h

call ds1302_writedata ;防寫

ret

;**************************************

;讀取當前時間

;入口引數:r0 (資料緩衝區首地址)

;出口引數:無

;**************************************

ds1302_gettime:

mov r7,#81h ;從暫存器81開始

mov r6,#7 ;連續讀7次

getnext:

mov a,r7 ;地址

call ds1302_readdata ;讀資料

mov @r0,a ;儲存資料

inc r7

inc r7 ;暫存器地址+2

inc r0 ;資料地址+1

djnz r6,getnext

ret

;**************************************

;初始化ds1302

;**************************************

ds1302_initial:

clr rst

clr sclk

mov a,#8eh

mov b,#0

call ds1302_writedata ;允許寫操作

mov a,#80h

mov b,#0

call ds1302_writedata ;時鐘啟動

mov a,#90h

mov b,#0a6h

call ds1302_writedata ;一個二極體+4k電阻充電

mov a,#8eh

mov b,#80h

call ds1302_writedata ;防寫

ret

end