rem Main.bas file generated by New Project wizard
rem Created: 周五 8月 30 2019 TAOTIE
rem Processor: ATmega16
rem Compiler: BASCOM-AVR
rem BASCOM-AVR版調光程序由Proteus 8 .8 中 Arduino Dimming 230V AC例程修改而來
rem 示波器觀察220V交流波形與同步過零信號交叉位置。觸發可控硅信號時上升沿的位置
$regfile = "m16def.dat"
$crystal = 8000000
'**********************安排變量*******************************
DIM us_Zhi AS Word '微秒值變量
DIM i as Byte '循環計數變量
DIM beilv as Byte '調光倍率變量(0-128)0 = ON,128= OFF
beilv = 128
'*******************端口初始化*********************************************************************
DDrd.2 = 0 'pd2腳為輸入(I NT0過零同步信號輸入端)
Pind.2 = 1 ' pd2腳上拉電阻有效
DDrA.3 = 1 ' 將pa3引腳設置為輸出(觸發控制交流負載 端)
PortA.3=1 '將pa3引腳設置為高電平
'******************外部I NT0過零同步信號中斷設置*******************************************************************************
Config Int0 = rising '外部中斷 Low Level低 rising 上 falling下
On Int0 guo_0_zd ' 過零中斷服務入口
Enable Interrupts '使能全局中斷
Enable Int0 '使能外部I NT0過零中斷
'**********觸發角控制倍率循環計數***********************************
do
for i = 1 to 128 Step 1
i=i+1
beilv=i
Waitms 10
Next i
i = 1
loop
'***************外部中斷過零服務子程序******************
guo_0_zd:
us_Zhi = 75*beilv
Waitus us_Zhi '高版本2078就是好,延遲時間值可以是變量
PortA.3=1
Waitus 10
PortA.3=0
Return
'觸發角計算:1個完整的50Hz波= 1/50 = 20ms
'每次零交叉:(50Hz) - > 10ms(1/2周期)
'對于60Hz => 8.33ms(10.000 / 120)
'10ms = 10000us
'(10000us - 10us)/ 128 = 75(大約)60Hz => 65