advertisement

2014年12月29日

LCD應用控制 8051 assembly

;------------------------------------------
;     ==================================
;     ==        LCD應用控制         ==
;     ==          2014/12/29          ==
;     ==        蘇偉諺 4A037052       ==
;     ==================================
;------------------------------------------
;於LCD顯示第二列顯示'THIS IS 2ND LINE'並閃爍三次,然後由左而右依序清除

LCD應用控制 8051 assembly

;------------------------------------------
; ==================================
; == lcd應用控制 ==
; == 2014/12/29 ==
; == 蘇偉諺 ==
; ==================================
;------------------------------------------
;於lcd顯示第二列顯示'THIS IS 2ND LINE'並閃爍三次,然後由左而右依序清除
;-----------------------------------------------------------------------------
; parameter define
;-----------------------------------------------------------------------------
lcd_enable equ p3.7
lcd_rs equ p2.1
lcd_bus equ p0
;-----------------------------------------------------------------------------
; main program
;-----------------------------------------------------------------------------
org 00h
mov sp,#5fh
call initlcd
mov r5,#3
glint: call clrlcd;;;;;;;
mov r7,#20
call delay50ms
mov a,#1
mov b,#0
call goxy
mov dptr,#str
call prtstring
mov r7,#20
call delay50ms
djnz r5,glint
mov r4,#16
mov b,#15
clrrr: mov a,#1
call goxy
mov a,#20h
call wrdr
mov r7,#20
call delay50ms
dec b
djnz r4,clrrr
jmp $
str: db 'THIS IS 2ND LINE','$'
;-----------------------------------------------------------------------------
; go x line, y char
;-----------------------------------------------------------------------------
goxy: anl b,#00001111b
cjne a,#1,chk1
mov a,b
add a,#10000000b;setb a.7 orl 10000000b
call wrir
ret
chk1: mov a,b
add a,#11000000b
call wrir
ret
;-----------------------------------------------------------------------------
; initial lcd
;-----------------------------------------------------------------------------
initlcd: mov a,#38h
call wrir
mov a,#0dh
call wrir
mov a,#06h
call wrir
clrlcd: mov a,#01h
call wrir
mov r7,#40;清除需延遲2ms
call delay
ret
;-------------------------------------------------------------------------------
; delay time=r7*0.05ms
;-------------------------------------------------------------------------------
delay: mov tmod,#00100001b
dloop: mov th0,#high(65536-50)
mov tl0,#low(65536-50)
setb tr0
jnb tf0,$
clr tr0
clr tf0
djnz r7,dloop
ret
;-------------------------------------------------------------------------------
; delay time=r7*50ms
;-------------------------------------------------------------------------------
delay50ms:
dloop1: mov th0,#high(65536-50000)
mov tl0,#low(65536-50000)
setb tr0
jnb tf0,$
clr tr0
clr tf0
djnz r7,dloop1
ret
prtstring: push acc
prtloop: clr a
movc a,@a+dptr
cjne a,#'$',next
jmp endprt
next: call wrdr
inc dptr
jmp prtloop
endprt: pop acc
ret
;-----------------------------------------------------------------------------
; write control word to instruction register
;-----------------------------------------------------------------------------
wrir: setb lcd_enable
clr lcd_rs
mov lcd_bus,a
clr lcd_enable
mov r7,#1
call delay
ret
;-----------------------------------------------------------------------------
; write data to data register
;-----------------------------------------------------------------------------
wrdr: setb lcd_enable
setb lcd_rs
mov lcd_bus,a
clr lcd_enable
mov r7,#1
call delay
ret
end

UART、LCD與4x4鍵盤應用

;------------------------------------------
; ==================================
; == uart、lcd與4x4鍵盤應用 ==
; == 2014/12/28 ==
; == 蘇偉諺 4a037052 ==
; ==================================
;------------------------------------------
;按下按鍵後 該按鍵值會從lcd第一列最右邊慢慢移動至最左邊停止
;-----------------------------------------------------------------------------
; parameter define
;-----------------------------------------------------------------------------
lcd_rs equ p2.1
lcd_enable equ p3.7
lcd_bus equ p0
keyport equ p2
keyflag equ 20h.2
scancode equ 33h
keyno equ 34h;;????
rxdflag equ 20h.3
;-----------------------------------------------------------------------------
; main program
;-----------------------------------------------------------------------------
org 00h
mov sp,#5fh
call initlcd
call uartinit
; mov r0,#15
again: mov r0,#16
call keyin
jnb keyflag,again
call txd0
rrx: call rxd0
jnb rxdflag,rrx;;;這邊要到呼叫rxd0的之方,否則到again的話,或沒一次接收成功,會導致多傳兩次以上 8051可以多接收一位員組資料暫存 所以會傳副接收到暫存的資料
mov r3,a
;--------------------------------------------
; mov b,r0
; mov a,#1
; call goxy
; mov a,r3
; mov dptr,#str;;;;;;
; movc a,@a+dptr
; call wrdr
; mov r7,#??
; call delay
; mov b,r0
; mov a,#1
; call goxy
; mov a,#' '
; call wrdr
;
; mov b,r0
; mov a,#1
; call goxy
; mov a,r3
; mov dptr,#str
; movc a,@a+dptr
; call wrdr
; mov r7,#??
; call delay
; mov b,r0
; mov a,#1
; call goxy
; mov a,#' '
; call wrdr
;--------------------------------------------------
goprint: mov b,r0
mov a,#1
call goxy
mov a,#' '
call wrdr
dec r0
mov b,r0
mov a,#1
call goxy
mov a,r3
mov dptr,#str
movc a,@a+dptr
call wrdr
mov r7,#10
call delay50ms
cjne r0,#0,goprint
jmp again
;-----------string table------------------------
str: db '0123456789abcdef'
;-----------------------------------------------------------------------------
; scan keyboard
;-----------------------------------------------------------------------------
keyin: push 00
push 01
mov r0,#0
mov scancode,#11111110b
keyrow: mov keyport,scancode
mov r7,#4
call delay
mov a,keyport
mov r1,#4
swap a
kcol: rrc a
jnc keypressed
inc r0
djnz r1,kcol
mov a,scancode
rl a
mov scancode,a
jnb acc.4,nokey;;;;;;;;;;;;;;;;;;;;
jmp keyrow
nokey: clr keyflag
jmp keyend
keypressed: mov a,r0
setb keyflag
keyend: pop 01
pop 00
ret
;-----------------------------------------------------------------------------
; go x line, y char
;-----------------------------------------------------------------------------
goxy: anl b,#00001111b
cjne a,#1,chk1
mov a,b
add a,#10000000b;setb a.7 orl 10000000b
call wrir
ret
chk1: mov a,b
add a,#11000000b
call wrir
ret
;-----------------------------------------------------------------------------
; initial lcd
;-----------------------------------------------------------------------------
initlcd: mov a,#38h
call wrir
mov a,#0dh
call wrir
mov a,#06h
call wrir
clrlcd: mov a,#01h
call wrir
mov r7,#40;清除需延遲2ms
call delay
ret
;-------------------------------------------------------------------------------
; delay time=r7*0.05ms
;-------------------------------------------------------------------------------
delay: mov tmod,#00100001b
dloop: mov th0,#high(65536-50)
mov tl0,#low(65536-50)
setb tr0
jnb tf0,$
clr tr0
clr tf0
djnz r7,dloop
ret
;-------------------------------------------------------------------------------
; delay time=r7*50ms
;-------------------------------------------------------------------------------
delay50ms:
dloop1: mov th0,#high(65536-50000)
mov tl0,#low(65536-50000)
setb tr0
jnb tf0,$
clr tr0
clr tf0
djnz r7,dloop1
ret
;-----------------------------------------------------------------------------
; write control word to instruction register
;-----------------------------------------------------------------------------
wrir: setb lcd_enable
clr lcd_rs
mov lcd_bus,a
clr lcd_enable
mov r7,#1
call delay
ret
;-----------------------------------------------------------------------------
; write data to data register
;-----------------------------------------------------------------------------
wrdr: setb lcd_enable
setb lcd_rs
mov lcd_bus,a
clr lcd_enable
mov r7,#1
call delay
ret
rxd0: jnb ri,rxdret
mov a,sbuf
clr ri
setb rxdflag
ret
rxdret: clr rxdflag
ret
txd0: clr ti
mov sbuf,a
jnb ti,$
clr ti
ret
;------------------------------------------------------------------------------
; initial uart,timer1,timer0
;12mhz: timer1,th1
;-----------------------------------------------------------------------------
uartinit: mov scon,#01010000b ;uart:mode 1
mov tmod,#00100001b ;timer1:mode 2, timer0:mode 1
mov pcon,#10000000b ;(smod=1)
mov th1,#255 ;baud rate=62500 bits/sec
setb tr1 ;start timer1
; clr tr0
; clr tf0
clr ri
clr ti
ret
end

4x4按鍵與LCD應用 8051 assembly

;------------------------------------------
; ==================================
; == 4x4按鍵與lcd應用 ==
; == 2014/12/28 ==
; == 蘇偉諺 4a037052 ==
; ==================================
;------------------------------------------
;
;於lcd的第一列顯示'0123456789abcdef'並利用4x4keyport按鍵,按下數字後其lcd上相對應的數字會往下跳至第二列
lcd_rs equ p2.1
lcd_enable equ p3.7
lcd_bus equ p0
keypor equ p2
keyflag equ 20h.2
scancode equ 33h
keyno equ 34h
org 00h
mov sp,#5fh
call initlcd
mov dptr,#str
call prtstring
again: call keyin
jnb keyflag,again
push acc;;;;;;;;;;;;;;
mov b,a
mov a,#1
call goxy
mov a,#20h
call wrdr
mov a,#2
call goxy
pop acc;;;;;;;;;;;;;;
mov dptr,#str;;;;;;
movc a,@a+dptr
call wrdr
jmp again
str: db '0123456789ABCDEF','$'
keyin: push 00
push 01
mov r0,#0
mov scancode,#11111110b
keyrow: mov keyport,scancode
mov r7,#4
call delay
mov a,keyport
mov r1,#4
swap a
kcol: rrc a
jnc keypressed
inc r0
djnz r1,kcol
mov a,scancode
rl a
mov scancode,a
jnb acc.4,nokey;;;;;;;;;;;;;;;;;;;;
jmp keyrow
nokey: clr keyflag
jmp keyend
keypressed: mo a,r0
setb keyflag
keyend: pop 01
pop 00
ret
goxy: anl b,#00001111b
cjne a,#1,chk1
mov a,b
add a,#10000000b;setb a.7 orl 10000000b
call wrir
ret
chk1: mov a,b
add a,#11000000b
call wrir
ret
prtstring: push acc
prtloop: clr a
movc a,@a+dptr
cjne a,#'$',next
jmp endprt
next: call wrdr
inc dptr
jmp prtloop
endprt: pop acc
ret
initlcd: mov a,#38h
call wrir
mov a,#0dh
call wrir
mov a,#06h
call wrir
clrlcd: mov a,#01h
call wrir
mov r7,#40;清除需延遲2ms
call delay
ret
delay: mov tmod,#00010001b
dloop: mov th0,#high(65536-50)
mov tl0,#low(65536-50)
setb tr0
jnb tf0,$
clr tr0
clr tf0
djnz r7,dloop
ret
wrir: setb lcd_enable
clr lcd_rs
mov lcd_bus,a
clr lcd_enable
mov r7,#1
call delay
ret
wrdr: setb lcd_enable
setb lcd_rs
mov lcd_bus,a
clr lcd_enable
mov r7,#1
call delay
ret
end

喇叭與七段應用控制 8051 assembly

;------------------------------------------
; ===================================
; == 喇叭與七段應用控制 ==
; == 2014/12/29 ==
; == 蘇偉諺 4a037052 ==
; ===================================
;------------------------------------------
;控制喇叭及七段顯示器
;
spk equ p1.7; 定義spk等於p1.7
seg equ p1; 定義seg等於p1,p1等於7段顯示器
temp_h equ 30h;定義temp_h等於30h
temp_l equ 31h;定義temp_l等於31h
mov sp,#5fh;把5fh內的資料複製到sp
main: mov r0,#8;把8的值複製到r0
mov dptr,#table_seg_tone;把table_seg的值複製到dptr,dptr=16位元暫存
loop: clr a
movc a,@a+dptr;從rom把dptr的值取出和a的值相加,把相加的值放回a
mov seg,a;把a的值複製到seg,使7段顯示器顯示功能
inc dptr
clr a
movc a,@a+dptr;從rom把dptr的值取出和a的值相加,把相加的值放回a
mov temp_h,a;把a的值複製到temp_h
inc dptr
clr a
movc a,@a+dptr;從rom把dptr的值取出和a的值相加,把相加的值放回a
mov temp_l,a;把a的值複製到temp_l
call music;呼叫music副程式
mov r7,#100;把100的值複製到r7
call delay;呼叫delay副程式
inc dptr;將r1加1
djnz r0,loop;將r0減1,若r0不為0就跳到loop
jmp main;程式結束
music: mov tmod,#00010001b;將timer1跟timer0都設定成mode1:16位元 計時/計數器
mov r3,#160;把160的值複製到r3
lpmusic1:
mov th1,temp_h;把temp_h的值複製到th1
mov tl1,temp_l;把temp_l的值複製到tl1
setb tr1;將tr1設定成1
wait1: jnb tf1,wait1;若tf1不為1就跳到wait1
clr tr1;清除tr1
clr tf1;清除tf1
cpl p1.7;清除p1.7
djnz r3,lpmusic1;把r3減1,若r3不為0就跳到lpmusic1
ret
delay: mov th0,#high(65536-10000);將(65536-10000)的值放到th0,為了延遲0.01ms
mov tl0,#low(65536-10000);將(65536-10000)的值放到tl0,為了延遲0.01ms
setb tr0;將tr0設定成1
wait0: jnb tf0,wait0;若tf0不為1就跳到wait0
clr tf0;清除tf0
clr tr0;清除tr0
djnz r7,delay;把r7減1,若r7不為0就跳到delay
ret
table_seg_tone:
db 0xf9;7段顯示器顯示1 ,0
dw 0fc44h ;do:a=0 1
db 0xa4;7段顯示器顯示2 ,1
dw 0fcadh ;re:a=2 3
db 0xb0;7段顯示器顯示3 ,2
dw 0fd0ah ;mi:a=4 5
db 0x99;7段顯示器顯示4 ,3
dw 0fd34h ;fa:a=6 7
db 0x92;7段顯示器顯示5 ,4
dw 0fd84h ;so:a=8 9
db 0x82;7段顯示器顯示6 ,5
dw 0fdc8h ;la:a=10 11
db 0xd8;7段顯示器顯示7 ,6
dw 0fe0bh ;si:a=12 13
db 0x80;7段顯示器顯示8 ,7
dw 0fe23h ;do:a=14 15
end
view raw speaker_ssd.asm hosted with ❤ by GitHub

LCD 應用控制 8051 assembly

;------------------------------------------
; ===================================
; == lcd 應用控制 ==
; == 2014/12/29 ==
; == 蘇偉諺 4a037052 ==
; ===================================
;------------------------------------------
;開機後,lcd第一列顯示'0123456789abcdef',並閃爍3次,接著每個字元依序跳至第二列顯示
;-----------------------------------------------------------------------------
; parameter define
;-----------------------------------------------------------------------------
lcd_enable equ p3.7
lcd_rs equ p2.1
lcd_bus equ p0
;-----------------------------------------------------------------------------
; main program
;-----------------------------------------------------------------------------
org 00h
mov sp,#5fh
call initlcd
; call clrlcd
; mov r7,#20
; call delay50ms
; mov dptr,#str
; call prtstring
; mov r7,#20
; call delay50ms
; call clrlcd
; mov r7,#20
; call delay50ms
; mov dptr,#str
; call prtstring
; mov r7,#20
; call delay50ms
; call clrlcd
; mov r7,#20
; call delay50ms
; mov dptr,#str
; call prtstring
; mov r7,#20
; call delay50ms
mov r5,#3
glint: call clrlcd;;;;;;;
mov r7,#20
call delay50ms
mov dptr,#str
call prtstring
mov r7,#20
call delay50ms
djnz r5,glint
; mov a,#1
; mov b,#0
; call goxy
; mov a,#20h
; call wrdr
; mov a,#2
; mov b,#0
; call goxy
; mov dptr,#str
; mov a,#0
; movc a,@a+dptr
; call wrdr
; mov a,#1
; mov b,#1
; call goxy
; mov a,#20h
; call wrdr
; mov a,#2
; mov b,#1
; call goxy
; mov dptr,#str
; mov a,#1
; movc a,@a+dptr
; call wrdr
mov r3,#0
mov dptr,#str
appear: mov a,#1
mov b,r3
call goxy
mov a,#20h
call wrdr
mov a,#2
mov b,r3
call goxy
mov a,r3
movc a,@a+dptr
call wrdr
inc r3
mov r7,#20
call delay50ms
cjne r3,#16,appear
jmp $
str: db '0123456789abcdef','$'
;-----------------------------------------------------------------------------
; display string
;-----------------------------------------------------------------------------
prtstring: push acc ;
prtloop: clr a ;
movc a,@a+dptr ;
cjne a,#'$',next ;
sjmp endprt ;
next: acall wrdr ;
inc dptr ;
jmp prtloop ;
endprt: pop acc ;
ret ;
;-----------------------------------------------------------------------------
; initial lcd
;-----------------------------------------------------------------------------
initlcd: mov a,#38h
call wrir
mov a,#0dh
call wrir
mov a,#06h
call wrir
clrlcd: mov a,#01h
call wrir
mov r7,#40;清除需延遲2ms
call delay
ret
;-----------------------------------------------------------------------------
; go x line, y char
;-----------------------------------------------------------------------------
goxy: anl b,#00001111b ;
cjne a,#1,chk1 ;
mov a,b ;
add a,#10000000b ;
call wrir ;
ret ;
chk1: mov a,b ;
add a,#11000000b ;
call wrir ;
ret ;
;-----------------------------------------------------------------------------
; write control word to instruction register
;-----------------------------------------------------------------------------
wrir: clr lcd_rs ;
setb lcd_enable ;
mov lcd_bus,a ;
clr lcd_enable ;
mov r7,#1 ;
call delay ;delay 50us
ret ;
;-----------------------------------------------------------------------------
; write data to data register
;-----------------------------------------------------------------------------
wrdr: setb lcd_rs ;
setb lcd_enable ;
mov lcd_bus,a ;
clr lcd_enable ;
mov r7,#1 ;
call delay ;delay 50us
ret ;
;-------------------------------------------------------------------------------
; delay time=r7*0.05ms
;-------------------------------------------------------------------------------
delay: mov tmod,#00010001b ;timer 0 : mode 1
loopdy: mov th0,#high(65536-50);
mov tl0,#low(65536-50);
setb tr0 ;
wait: jnb tf0,wait ;
clr tf0 ;
clr tr0 ;
djnz r7,loopdy ;
ret ;
;-------------------------------------------------------------------------------
; delay time=r7*50ms
;-------------------------------------------------------------------------------
delay50ms:
loopdy1: mov th0,#high(65536-50000)
mov tl0,#low(65536-50000)
setb tr0
jnb tf0,$
clr tf0
clr tr0
djnz r7,loopdy1
ret
end
view raw lcd.asm hosted with ❤ by GitHub

七段與MINIKEY應用控制 8051 assembly

;------------------------------------------
;     ===================================
;     ==     七段與MINIKEY應用控制     ==
;     ==          2014/12/29           ==
;     ==        蘇偉諺 4A037052        ==
;     ===================================
;------------------------------------------
; 以MINIKEY的4個按鍵來控制七段顯示器的動作,按S1、S2、S3、S4分別顯示“┌” 、 “┐” 、“└” 、“┘”。;-----------------------------------------------------------------------------

喇叭與MINIKEY應用控制 8051 assembly

;------------------------------------------
;     ===================================
;     ==     喇叭與MINIKEY應用控制     ==
;     ==          2014/12/29           ==
;     ==        蘇偉諺 4A037052        ==
;     ===================================
;以MINIKEY的4個按鍵來控制喇叭,按S1、S2、S3、S4分別讓喇叭發出1kHz、2kHz、4kHz、8kHz聲響。

七段應用控制 8051 assembly

;------------------------------------------
;     ===================================
;     ==         七段應用控制          ==
;     ==          2014/12/29               ==
;     ==        蘇偉諺 4A037052     ==
;     ===================================
;------------------------------------------
;依序點亮七段顯示器的燈管a、燈管b、燈管c…燈管g;點亮的同時依序閃爍1次、2次、3次…7次。

2014年12月26日

2014/12/26進階微控制器應用

需下載
FreeRTOS  v7.6.0程式源碼
在source資料夾
list.c
task.c
在source/portable/SDCC/Cygnal/資料夾=>for 8051

2014年12月21日

2014年12月19日

Debian WPA Wireless how to use

# vi /etc/network/interfaces
auto eth1
iface eth1 inet dhcp
wpa-ssid [EESID]
wpa-psk [passowd key]
# ifup eth1

root@Lenovo-B480:/home/clementyan# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=46 time=11.7 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=46 time=12.8 ms
64 bytes from 8.8.8.8: icmp_req=4 ttl=46 time=12.5 ms

2014/12/19 進階微控制器應用

http://static.grumpycoder.net/pixel/uC-sdk-doc/index.html

在freeRTOS中每一個工作均以一個TCB來代表,所以建立一個新的工作,實際就是建立一個新的TCB資料。

新的TCB均需加入工作就緒列表(pxReadyTaskLists),如果是第一個工作,則就需被執行,否則需等待排程。

建立一個新的TCB主要是初化TCB堆疊區,回顧TCB之資料結構

2014年12月16日

Debian 64位元作業系統 裝 32位元套件 安裝 skype

# dpkg --add-architecture i386
# apt-get update;apt-get upgrade
# apt-get install ia32-libs
此行只限於wheezy squeeze,jessie不用裝--2015/06/08
# dpkg -i skype-debian_4.3.0.37-1_i386.deb
# apt-get install -f
# dpkg -i skype-debian_4.3.0.37-1_i386.deb


# apt-get install pulseaudio

$ skype &

若還是不行試試下面的指令
$ LD_PRELOAD=/usr/lib/mesa-diverted/i386-linux-gnu/libGL.so.1 skype &
2016/05/27

2014年12月12日

2014/12/12 進階微控制器應用

主要記憶體有二

  1. stack堆疊-儲存區域變數、全域變數=>managed(受管理的),無記憶體洩漏(編譯時已知道的變數)
  2. heap記憶堆-儲存動態變數(大量)使用malloc(配置),free(釋放),使用過後需要把他free釋放,否則造成記憶體洩漏(編譯時不知道的變數)
freeRTOS有三種記憶體堆
  1. keap_1只配置不釋放(適合當你的應用程式是固定的動態記憶體,或者已經知道最多所需使用的動態記憶體微多少)
  2. keep_2可配置可釋放,使用簡易方法執行配置、釋放,可能會造成記憶體碎斷(fragmentation):假設第一筆資料100bytes,第二筆50bytes,第三筆30bytes,若第二筆被釋放,則要在新增大於50bytes的資料,則會無法放入,只能放置在第三筆之後,稱記憶體碎斷,使記憶體存取速度下降,則需使用記憶體重整。
  3. keep_3完整之配置釋放,並且會記憶體重整,較常用較耗時

2014年12月5日

2014/12/05 進階微控制器應用

critical section(緊要區):當程式進入緊要區時有兩種可能(該區程式不可太長),目的:希望緊要區內的程式不被其他程式打斷

  1. 所有中斷被除能(disable)
  2. 部份中斷被除能(需包含系統滴答中斷的除能,則不會文本切換),保留部份硬體中斷仍可致能,被致能之中斷需能被控制到不切割緊要區之程式,程式進入緊要區後,執行緊要區程式後,要離開緊要區時,需重新致能被除能之中斷

2014年11月28日

2014/11/28 進階微控制器應用

Counting Semaphore 計數信號 (為具有長度大於一之佇列,ㄧ次可以傳好幾個)
Binary Semaphore 二元信號(是長度為一之佇列,且ㄧ次只能傳一個資料,而資料內容不care)

為什麼要用到計數信號?

2014年11月11日

Speed up flash games chrome

1. Please download Cheat Engine version 6.2, don't download the latest version, because the latest version may be unstable.

  • CheatEngine62.exe is malicious, and Chrome has blocked it.

2014年10月24日

2014/10/24進階微控制器應用

vTaskDelay(延遲時間)從他呼叫開始計時
vTaskUntil(上次Task開始時間,延遲時間)從上次Task開始時間計時

Task2(void *ptr) {
    .//假設中間程式碼需50Ticks
    .
    vTaskDelay(100);
}

Task1(void *ptr) {
    取得執行開始時間
    .
    .//假設中間程式碼需50Ticks
    vTaskUntil(開始執行時間,100);
}

時序圖如下:

2014年10月17日

2014年10月3日

2014/10/03 進階微控制器應用


  1. 至MY數位學習下載Posix_GCC_Simulator_6.0.4.zip
  2. cd micro,在~/micro 下解壓縮
  3. unzip ~/下載/Posix_GCC_Simulator_6.0.4.zip
  4. 在~/micro 下 cd Posix_GCC_Simulator/FreeRTOS_Posix/Release/
  5. 在~/micro/Posix_GCC_Simulator/FreeRTOS_Posix/Release/  執行make

2014年9月26日

2014/09/26進階微控制器應用

--------------------------------------------------------------
第一節
RTOS即時作業系統

以Task(工作)為主
每個Task(工作)基本上為一無窮執行的函數(副程式)

為了要使進入無窮迴圈能在跳出來,故我們要使用Context(文本)
每種微控制器之文本可能有些微之差異,但基本必具有:

2014年9月19日

2014/09/19進階微控制器應用

課程進度:
2014/09/19:介紹課程、FreeRTOS簡介、建立開發環境
09/26~10/3:FreeRTOS架構、工作(Task)、
10/10:放假
10/17~10/24:FreeRTOS 通訊Communication
10/31:FreeRTOS Porting(移植) (目標微控制器為8051)
11/7:期中考
11/14:期中考(補)
11/21~11/28:FreeRTOS應用在8051上
12/5~12/12:FreeRTOS移植到Windows DOS 並型應用程式
12/19~12/26:FreeRTOS移植到Linux上並執行
1/2:放假
1/9:期末考
1/16:期末考(補)
重點:如何移植、熟練、記好步驟

2014年7月8日

HOLTEK HT-IDE3000 無法進入for迴圈 delay副程式撰寫 延遲問題

HT-IDE3000 V3版有做部分修正,其中把V2版用於延遲循環的程式碼優化,使其程式碼不會進入延遲循環程式。

解決方式:

2014年5月17日

RF傳輸模組要點

傳輸以字元為佳,避免因空白、TAB等因素造成資料誤判。
傳輸資料後須延遲至少1ms的時間。
Arduino有接Tx/Rx時無法燒入,因Arduino透過Tx/Rx來燒入程式。
RF模組可將接收端裝設天線,並須以焊接方式連接,發射端無須。
傳輸boud rate因做適當調整,不可過高。
傳輸資料至少要一次重複傳三次以上。
天線長短與材質會影響傳輸效果。

2014年3月14日

Java

抽象類別不一定有抽象方法,抽象類別用來做規範,遊子類別來實做

介面內之變數預設為常數,且其介面預設為static
介面繼承可以多重繼承,類別只能繼承一個

2014年3月13日

DSP 17ABC1893A x 3 運算

.include "vector.def" ;Interrupt Vector define file
.include "register.def" ;Special Purpose Register define file
.include "eSLMacro.def" ;Macro define file
.GLOBAL POWERON
.CODE
.include "interruptvector.def" ;Define all interrupt labels

2014年3月12日

Java

Overriding(覆寫):先決條件要先繼承,兒子繼承使用父親方法不夠用時,則改寫其方法內容,稱之,並在子類別做,可以覆寫好幾代的父親功能

兒Overloading可在子類別與父類別做

2014年3月11日

Virtuoso 基本操作


Step 1.執行 virtuoso 的前置作業


     a. 進入/opt/PROCESS 的目錄,指令為: cd /opt/PROCESS
     b. 在複製CIC0181P6M目錄到家目錄,指令為:cp -a CIC0181P6M /home/clementyan/

2014年3月6日

簡易控制LED

功能:LED由pin0至pin5,依序發亮間隔0.5s,再由pin5腳至pin0腳依序滅

2014年3月5日

JAVA

long L1=1;(1沒加是int,但會隱含轉型為long)
float f3=L1;//只要整數型態(int,long)皆可轉型成float或double

byte myVar1; //myVar1=1; //  1 整數 預設型別是32bit(int)--先隱含轉型 再assign
myVar1=1;//1會轉成byte的大小

//short (16bit)
short myShort1=12345; //12345預設為32bit隱含轉型看看
//兩個變數同類型定義
short s1=1,s2=2,s3;
byte b1=1,b2=1,b3;
b3=(byte)(b1+b2); //進行保守原則的編譯 直接晉升為int
//short or byte之間運算隱含直接晉升為int
int i1=b1+b2;

private封裝不會封裝同一個類別,只會對其他類別封裝

static具有共用特性 共用global記憶體,使用static不用建立物件即可呼叫

2014年3月3日

JAVA

(判斷式)? XX:YY;  判斷是成立則輸出XX
X與Y要同型別


2014年2月28日

Windows 7 使用 Windows XP 所共用的印表機 HP LaserJet P2015 Series PCL 6

以下範例之規格與作業系統:

    共享印表機的主機:Windows XP (32位元)
    預安裝印表機的主機:Windows 7 (64位元)
    印表機型號:HP LaserJet P2015 Series PCL 6
    連線方式:網路


Step 1.到HP官網查詢您的HP印表機驅動程式:http://www8.hp.com/tw/zh/drivers.html

2014年2月26日

JAVA

分類
1.從基礎的類別開始設計,從重複的地方開始設計
2.成員規則--attributes(特徵/屬性)  分類一班使用特徵來分,方法不是合作分類(除了介面:USB介面等),故央同的特徵用同一個類別,再透過繼承方式分出不同物件的類別
        --method(方法/功能)
依據attributes較多
目的:可重複使用(Reuse)

2014年2月21日

JAVA

類別建構成物件使用建構子 new~~ Scanner xxx=new Scanner(InputSteam) 建構子    參考(位址) 要看建構子()之內容要看說明書 return;//直接結束 寫程式要注意下列兩項; 例外管理 validation 為什麼Scanner要物件化 a:如果scanner同時從網路上與C>接收字串則scanner要個別物件化,否則會發生衝突,無法同時接收c>與網路上的字串流

2014年2月17日

JAVA

System.out.printf("字串"+任何型態);其 "字串"與任何型態做相加 皆會轉成字串型態輸出 布林-boolean-true,false(JAVA的boolean只能存放true 和 false,不可存放0 1 >,<,=,>=,<=,!= 字元-char 1234_5678 0XAAAA_FFFF_0109 0b1111_0101 Escape "\0" t-tab n-newline u-unicode ===================================================== 對project按右鍵-Properties-Testfile encoding-other-UTF-8(MS950) unicode萬用碼-16bit=2Bytes ASCII-8bit=1Byte 記事本-存檔-編碼的不同 按F1查操作手冊 基本型別為值型別:固定大小空間 物件為參考型別:初始空間大小不固定 類別的變數必指派物件位址 類別是一個參考型別參考物件 物件存放的是位址而不是值 String為類別 來自java.lang.String 類別class: 1.atribute 2.method 3.constructor建構子 物件狀態持久(state persistence),生命週期長 值型別生命週期短 { int s1=1; String s2="1"; } 到此區塊結束故s1變數結束生命,1值型別也結束生命 到此區塊結束故s2變數結束生命,"1"物件不一定結束生命,但s2的位址值結束生命 //String 字串並非是固定長度的 動態配置記憶體的 所有物件都是 String are constant

2014年2月12日

JAVA

J2SE 主控台 gui J2EE webapp 湯姆貓 class類別 命名 區段 成員 camel駱駝命名法 第一個英文字詞小寫,第二個英文字詞大寫 pascal命名法英文字詞首字大寫,中間不可空格,中間可以底線與數字 java關鍵字一律小寫 類別名稱再同一個package下不可重複

2014年1月3日

89C51 顯示時鐘 Assembly

;------------------------------------------
;     ==================================
;     ==     LCD 計時器控制(改良版)      ==
;     ==          2013/12/21          ==
;     ==        蘇偉諺 4A037052        ==
;     ==================================
;------------------------------------------

2014年1月1日

FPGA 重點

四位元漣波進位加法器

module  ha(a,b,s,c);
        input   a,b;
        output  s,c;