求一微控制器程式用光敏電阻pwm輸出控制led亮度

時間 2021-05-04 10:29:00

1樓:匿名使用者

org 0000h

l0000: ljmp min00 ; 主程式

; / *** *** *** *** / 初始化 pwm

pca00: mov cmod, #82h ; (fsys/2)

mov ccon, #00h

mov cl, #00h

mov ch, #00h

mov ccapm0, #00h ; pwm0 輸出

mov pca_pwm0, #00h

setb cr ; 開 pwm

ret; / *** *** *** *** / 主程式

p1m0 equ 91h

p1m1 equ 92h

p3m0 equ 0b1h

p3m1 equ 0b2h

adc_contr equ 0c5h ; a/d 轉換暫存器

adc_data equ 0c6h ; a/d 結果暫存器

min00: mov p1m0, #08h ; 設定 p1.3 為高阻狀態

mov p1m1, #08h

mov adc_contr, #0e3h ; 開a/d 轉換電源 p1.3

lcall pca00 ; 初始化 pwm

min10: nop ; 主程式 入口

lcall adc00 ; 測光敏電阻電壓

mov ccap0h, a ; 寫入pwm 控制 發光亮度

ljmp min10

ret; / *** *** *** *** / a/d 轉換通道 測電壓

adc00: mov adc_data, #00h

orl adc_contr, #08h ; 啟動 ad 轉換

mov a, #10h ; 判斷 ad 轉換是否完成

anl a, adc_contr

jz adc32 ; ad 轉換尚未完成, 繼續等待

anl adc_contr, #0e7h ; 清0 adc_flag, adc_start 位, 停止a/d 轉換

mov a, adc_data ; a = ad 轉換結果

retend

2樓:

電源的5v那你不要接在地線上面了啦。呵呵 電都通不上,程式也很簡單的嘛。微控制器採集光敏電阻節點上的電壓,根據這個電壓輸出一定的占空比的pwm。

a/d:

org 0000h

ljmp main

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

org 0100h

main:

lcall init_uart ;init uart, use to show adc result

lcall init_adc ;init adc sfr

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

next:

mov a,#0

lcall show_result ;show channel0 result

mov a,#1

lcall show_result ;show channel1 result

mov a,#2

lcall show_result ;show channel2 result

mov a,#3

lcall show_result ;show channel3 result

mov a,#4

lcall show_result ;show channel4 result

mov a,#5

lcall show_result ;show channel5 result

mov a,#6

lcall show_result ;show channel6 result

mov a,#7

lcall show_result ;show channel7 result

sjmp next

;/*----------------------------

;send adc result to uart

;input: acc (adc channel no.)

;output:-

;----------------------------*/

show_result:

lcall send_data ;show channel no.

lcall get_adc_result ;get high 8-bit adc result

lcall send_data ;show result

;//if you want show 10-bit result, uncomment next 2 lines

; mov a,adc_low2 ;get low 2-bit adc result

; lcall send_data ;show result

ret;/*----------------------------

;read adc conversion result

;input: acc (adc channel no.)

;output:acc (adc result)

;----------------------------*/

get_adc_result:

orl a,#adc_power | adc_speedll | adc_start

mov adc_contr,a ;start a/d conversion

nop ;must wait before inquiry

nopnop

nopwait:

mov a,adc_contr ;wait complete flag

jnb acc.4,wait ;adc_flag(adc_contr.4)

anl adc_contr,#not adc_flag ;clear adc_flag

mov a,adc_res ;return adc result

ret;/*----------------------------

;initial adc sfr

;----------------------------*/

init_adc:

mov a,#0ffh

mov p1,a

mov p1m0,a

mov p1m1,a ;set all p1 as open-drain mode

mov adc_res,#0 ;clear previous result

mov adc_contr,#adc_power | adc_speedll

mov a,#2 ;adc power-on and delay

lcall delay

ret;/*----------------------------

;initial uart

;----------------------------*/

init_uart:

mov scon,#5ah ;8 bit data ,no parity bit

mov tmod,#20h ;t1 as 8-bit auto reload

mov a,#-5 ;set uart baudrate -(18432000/12/32/9600)

mov th1,a ;set t1 reload value

mov tl1,a

setb tr1 ;t1 start running

ret;/*----------------------------

;send one byte data to pc

;input: acc (uart data)

;output:-

;----------------------------*/

send_data:

jnb ti,$ ;wait for the previous data is sent

clr ti ;clear ti flag

mov sbuf,a ;send current data

ret;/*----------------------------

;software delay function

;----------------------------*/

delay:

mov r2,a

clr a

mov r0,a

mov r1,a

delay1:

djnz r0,delay1

djnz r1,delay1

djnz r2,delay1

retend

////////////////////////////////

a/d轉換的模板如上,pwm比較簡單,你自己看資料配置一下暫存器就可以了,

微控制器程式錯誤,51微控制器c語言程式錯誤

後面兩個錯誤是沒有宣告函式,最簡單的方法就是把main函式調到程式的最後,你看看還有沒有錯誤,我們 hhh.c 113 error c211 call not to a function這個呼叫函式名不存在 hhh.c 114 error c211 call not to a function這個呼...

求紅外置收頭的微控制器程式

void initial void 名 稱 rcv 功 能 紅外掃瞄解碼 入口引數 出口引數 說 明 備 注 慧淨電子網 www.hlmcu.com 慧淨空間 http hi.baidu.com hlmcu void rcv while cnt1 低電平大於4 256 10us 10.24ms則是錯...

求微控制器程式 LED檯燈自動調光等

你好 我贊同二樓的,一樓給你的只是乙個簡化問題的方向。你沒有描述出問題的特徵,是軟體編譯通不過 我覺得不是這個 還是不能調光,或調光範圍非常窄,或根本不調光。我感覺你應該是後面幾個問題如二樓所言。你的程式幾乎沒有注釋,很難看的明白,就我的經驗,說幾點建議。1.首先建立正確的數學模型,如你的程式 頻率...